{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4e10c267",
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.5.0/MindSpore/unified/x86_64/mindspore-2.5.0-cp310-cp310-linux_x86_64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "# !pip install download\n",
    "# !pip install matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "initial_id",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T06:09:23.272266Z",
     "start_time": "2025-05-09T06:09:21.824426Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Name: mindspore\n",
      "Version: 2.5.0\n",
      "Summary: MindSpore is a new open source deep learning training/inference framework that could be used for mobile, edge and cloud scenarios.\n",
      "Home-page: https://www.mindspore.cn\n",
      "Author: The MindSpore Authors\n",
      "Author-email: contact@mindspore.cn\n",
      "License: Apache 2.0\n",
      "Location: /home/mindspore/miniconda/envs/jupyter/lib/python3.9/site-packages\n",
      "Requires: asttokens, astunparse, dill, numpy, packaging, pillow, protobuf, psutil, safetensors, scipy\n",
      "Required-by: \n"
     ]
    }
   ],
   "source": [
    "!pip show mindspore"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6419b0ec6dca5ac8",
   "metadata": {},
   "source": [
    "# 数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a73932c815c0046",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T06:09:23.458696Z",
     "start_time": "2025-05-09T06:09:23.414679Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gz (162.2 MB)\n",
      "\n",
      "file_sizes: 100%|█████████████████████████████| 170M/170M [00:00<00:00, 170MB/s]\n",
      "Extracting tar.gz file...\n",
      "Successfully downloaded / unzipped to ./datasets-cifar10-bin\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'./datasets-cifar10-bin'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from download import download\n",
    "url = \"https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gz\"\n",
    "\n",
    "download(url, './datasets-cifar10-bin', kind='tar.gz', replace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe2f8bcc23181d36",
   "metadata": {},
   "source": [
    "下载后的数据集目录\n",
    "```text\n",
    "datasets-cifar10-bin/cifar-10-batches-bin\n",
    "├── batches.meta.text\n",
    "├── data_batch_1.bin\n",
    "├── data_batch_2.bin\n",
    "├── data_batch_3.bin\n",
    "├── data_batch_4.bin\n",
    "├── data_batch_5.bin\n",
    "├── readme.html\n",
    "└── test_batch.bin\n",
    "\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b1beacb9c5f12a7f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T06:09:27.125243Z",
     "start_time": "2025-05-09T06:09:23.466669Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/mindspore/miniconda/envs/jupyter/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.\n",
      "  setattr(self, word, getattr(machar, word).flat[0])\n",
      "/home/mindspore/miniconda/envs/jupyter/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.\n",
      "  return self._float_to_str(self.smallest_subnormal)\n",
      "/home/mindspore/miniconda/envs/jupyter/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.\n",
      "  setattr(self, word, getattr(machar, word).flat[0])\n",
      "/home/mindspore/miniconda/envs/jupyter/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.\n",
      "  return self._float_to_str(self.smallest_subnormal)\n"
     ]
    }
   ],
   "source": [
    "import mindspore as ms\n",
    "import mindspore.dataset as ds\n",
    "import mindspore.dataset.vision as vision\n",
    "import mindspore.dataset.transforms as transforms\n",
    "from mindspore import dtype as msdype\n",
    "\n",
    "data_dir = './datasets-cifar10-bin/cifar-10-batches-bin'\n",
    "batch_size = 256 # 批次大小\n",
    "image_size = 32 # 训练图像空间大小\n",
    "workers = 4 # 并行线程数\n",
    "num_classes = 10 # 分类数量\n",
    "\n",
    "def create_dataset_cifar10(dataset_dir, usage, resize, batch_size, workers):\n",
    "    data_set = ds.Cifar10Dataset(dataset_dir=dataset_dir,\n",
    "                                 usage=usage,\n",
    "                                 num_parallel_workers=workers,\n",
    "                                 shuffle=True)\n",
    "    \n",
    "    trans = []\n",
    "    if usage == 'train':\n",
    "        trans += [\n",
    "            vision.RandomCrop((32,32),(4,4,4,4)),\n",
    "            vision.RandomHorizontalFlip(prob=0.5)\n",
    "        ]\n",
    "    trans += [\n",
    "        vision.Resize(resize),\n",
    "        vision.Rescale(1.0 / 255, 0),\n",
    "        vision.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010]),\n",
    "        vision.HWC2CHW()\n",
    "    ]\n",
    "    \n",
    "    target_tran = transforms.TypeCast(ms.int32)\n",
    "    data_set = data_set.map(operations=trans,input_columns='image',num_parallel_workers=workers)\n",
    "    data_set = data_set.map(operations=target_tran,input_columns='label',num_parallel_workers=workers)\n",
    "    \n",
    "    data_set = data_set.batch(batch_size)\n",
    "\n",
    "    return data_set\n",
    "\n",
    "# 训练集和测试集\n",
    "train_dataset = create_dataset_cifar10(data_dir,'train', image_size, batch_size, workers)\n",
    "test_dataset  = create_dataset_cifar10(data_dir, 'test', image_size, batch_size, workers)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8efb96dcaab4714",
   "metadata": {},
   "source": [
    "# 数据集可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a6806c4beaa913c6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T06:09:28.687956Z",
     "start_time": "2025-05-09T06:09:27.173150Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACWWElEQVR4nO29eZDkV3Xne35r7ktl7VVdvakXqbvV2sFqBEhgi8VP4k0gkO3xexjj52EMZgh7xhPMCwd+EPYwz46Y9xiHCeOxscdIHgx+McYwxmNshAFJaN+71ftW+5aV+y9/2/sD+3eW6qyuJoYsQZ1PREfcrHvz5s3f7/7u7fyee84x4jiOQVEURVGUvmBu9QAURVEUZTuhG6+iKIqi9BHdeBVFURSlj+jGqyiKoih9RDdeRVEURekjuvEqiqIoSh/RjVdRFEVR+ohuvIqiKIrSR3TjVRRFUZQ+ohuvoiiKovSRbbfxPvnkk/DhD38YDh8+DLlcDnbu3Anvfe974eTJk1s9NEW5Kp7nwb/9t/8WJiYmIJPJwOtf/3r427/9260elqJsyCOPPAKGYVzx3+OPP77Vw+s79lYPoN/8h//wH+A73/kOvOc974GjR4/C3Nwc/O7v/i7ceuut8Pjjj8ORI0e2eoiK0pOf+7mfgy996Uvw0Y9+FPbv3w9//Md/DO985zvhG9/4Btx1111bPTxF2ZCPfOQjcMcdd7C/7du3b4tGs3UY2y1JwqOPPgq33347uK6b/O3UqVNw4403wgMPPACf//znt3B0itKbJ554Al7/+tfDb//2b8O//tf/GgAAOp0OHDlyBEZGRuDRRx/d4hEqypV55JFH4J577oEvfvGL8MADD2z1cLacbSc1Hzt2jG26AAD79++Hw4cPw/Hjx7doVIpydb70pS+BZVnwi7/4i8nf0uk0fOADH4DHHnsMLl26tIWjU5TNUa/XIQiCrR7GlrLtNt4rEccxzM/Pw9DQ0FYPRVF68uyzz8KBAwegWCyyv7/uda8DAIDnnntuC0alKJvn/e9/PxSLRUin03DPPffAU089tdVD2hK2nY33Sjz00EMwPT0Nn/jEJ7Z6KIrSk9nZWRgfH1/393/628zMTL+HpCibwnVdePe73w3vfOc7YWhoCF555RX4nd/5HXjjG98Ijz76KNxyyy1bPcS+su033hMnTsCHPvQhuPPOO+F973vfVg9HUXrSbrchlUqt+3s6nU7qFeW1yLFjx+DYsWPJ6/vvvx8eeOABOHr0KHzsYx+Dr33ta1s4uv6zraXmubk5+Mmf/EkolUqJ/UxRXqtkMhnwPG/d3zudTlKvKD8s7Nu3D971rnfBN77xDQjDcKuH01e27ca7trYG73jHO6BarcLXvvY1mJiY2OohKcqGjI+Pw+zs7Lq//9PfdA4rP2xMTU1Bt9uFZrO51UPpK9ty4+10OnDffffByZMn4Stf+QocOnRoq4ekKFfl5ptvhpMnT0KtVmN//+53v5vUK8oPE2fPnoV0Og35fH6rh9JXtt3GG4YhPPjgg/DYY4/BF7/4Rbjzzju3ekiKsikeeOABCMMQPvvZzyZ/8zwPPve5z8HrX/96mJqa2sLRKUpvFhcX1/3t+eefhy9/+ctw7733gmlur61o2x2u+tVf/VX48pe/DPfddx+srKysC5jxsz/7s1s0MkXZmNe//vXwnve8Bz72sY/BwsIC7Nu3D/7kT/4Ezp8/D3/4h3+41cNTlJ48+OCDkMlk4NixYzAyMgKvvPIKfPazn4VsNguf+tSntnp4fWfbRa66++674Zvf/GbP+m12OZQfMjqdDvz6r/86fP7zn4fV1VU4evQofPKTn4S3ve1tWz00RenJpz/9aXjooYfg9OnTUKvVYHh4GN761rfCxz/+cQ0ZqSiKoijKD5btJawriqIoyhajG6+iKIqi9BHdeBVFURSlj+jGqyiKoih9RDdeRVEURekjuvEqiqIoSh/ZdACNf/V/3ZuUpQeSYWzOI8kg5Q3fYcg/xFeuku3I69gQlXGvF71Hsq7GoEWjV9WGbNZ3a6N2BqmV7eg4/t//8+83+Wk/2vz237w1KdsWn/IWYGIMR9SZhtWjzP+/apC5Jqedwf6w6SeAEZP/H8exQcqyHf4hgojXRRiEPop5QPoojkg70ofoP4wweXkQ8T6CyL9iXRD6rB3tIwz4GAMf6377Z54FBeAX/o+34AtxQ2wb56vtuKzOInPUIclf4kjMC3LvHdGH73ev/NFiHCbp3xfzLqQJ70l0Kks8KDkHs245Lh9HSOfnumUd/xCF2C4M+Tgs8tmuzZ/ziHyfWh3DsdaaLT4Ocu1cx+EDMbDuc5/7BlwN/cWrKIqiKH1EN15FURRF6SOblpptKles0zc3kM1o3YZBsowrFv/xjb2raCvyWbHZWwqmUrkhtQsm1200xB+s1Pz9Ev/AP+GHj0KmkJTXS81U/uotNVPpzlgX0B1nyoZSM5Wk142y9/z3iVrbaKL8ZwnJLJuhEl3A6qjULOXGiMnLRK6LhWxIJeSI9x/EzhXrgpCPMSB5V0Nb9CFeK3wNMsXkohKvbfE5SV/Re2+IPqjpItpgXgQhWTPF/G+RHNGmyGluxdiW9geinR+QMZrcPEFNF7F49PwA+/R9bGeKZTBHclX7Xd5/q93G/ul7sjy/NX2fNLda15jkQX/xKoqiKEof0Y1XURRFUfqIbryKoiiK0kc2n483pvYprm/TV9L2ydtt5E6xOSvphhZMarvtchsCBOS1TWwGNneLENaRnv2vH8eV7Xfft811g8sRb3SN1cS7joydTcq2tEERu65t9rb/Mnciac+h5xg2sPH2Kn/vbb3v6fTSclJ+5pkTSbk8UGLtbrrpQFLOpLlLBsRoP41D8fySRyAkVsVA2ImpjTeMpTsRcRMiZT8S9rowuOJ7AACCgLdVuPuMYfK5y68lv3bUHkynZ5q47QAAODbOk06nwz+bLCb02fCC3vMiJdxsXBvH3O0xRwAADOLKZNn8WbAM7LPT9VgdfYwcmzyX0uWVXLquzz+71cXvHZGLlcvl+TjId5FzNS2ft6ugv3gVRVEUpY/oxqsoiqIofWTzUjN1zxEuODRylZTQWDtSXifBbuCSFPeQcSPh7uBXyf8j1ngfKUA5xMmiLBAUuewQZcix9nUj2awc3ita0VXcoTbVO7BrtT661mYdm7YPWYdIzfYGkatM6U5kk3LvyFXQMzrV5qVmkzxfwqsD2vWVpHz85fmkPDjUZu0OHdyPdcUsqwMq7cn/bhPpPCCStG90WTMmJwupmb6m7RzpTmRhXTfk/fvX6JKxHTDN3m6cbSoN2zKaIM4nG3rPu66Hkmm7zecTdS8qF4r494DLvSwqmlx+TCo9EzOGuPftDo4jCrhcbZNIVmHI12saAcsgLlXSFa7WxohUgYhqBS6NBofXsR1w6R2I65KU1FueaHsVdKYriqIoSh/RjVdRFEVR+ohuvIqiKIrSRzZv493IzWZD3xdqj+xtC2PB0YQdIiLuD1YHx1EycqydY6EtwChwW0A2he/LpdFecbGxyto1nAbpUNjraPTL3pEmQTpY9Wy2SeR71GXo2si6OE8cYeM1iY1XuhNRGy8LGWlwtw6DuDsYIOt62HhFSFNqNw6Fkdcx0V4b+TimdpPbWQ0StjGb4s8GEPcH+dnUxtsFbGeL78JtvMKlJKauLThGX7rAkD4sEebQDvV3gMQlS7RtCxdJBxeCTsRtpjTTVkTcfyLhSmaR9alQKLA6auONyKITdMOe7UJxVqfrYVs6xnQqzdqNlAaTcrPZZHW1OtpPQ2FfzqTJM0pswV2RFavWwnVdZiFLpzA0JHXZEmZisFP4fMnQs5mUyFZ0FXSmK4qiKEof0Y1XURRFUfrINUSuoi82cJGJpbQa9agT0XM2yNzCXC0s7C9v8WghN0xMJOXnz82zuuUmShQDJCBJEbhE0CZSXuDISDrUpQo2oLekvlmV+PtVk2XWDAUg5+ANl+5EXE52RR2NVkVdi2QmGKxbLzVbVyzLbCbUJU9GdMq6KDU7RJ61hBSWApSX89YwrzRIBhahWMYka4wDKAeGEY9yFMS9IyXR16y8gUtSN+b3omteg+VrmxB2ibwvIoll0ijXek1eR6MzZVy8j6b4rUXl63SK32+buMzQOcKyDAFASDJOOcLNxifjoH3s27+Ptdu7E1+3WzVWt7oyi3UialZEnql6A+Xk9uICa5e38dnIZbmrXSaN35u6ObWE5J3J4PW2hAnF6/J5fjX0F6+iKIqi9BHdeBVFURSlj3yf2s5GQfo3J3WuaxVvUEebOaivLQA/4TZlY9D4nMOlhoicauu08O+VDJcdaiFKEmsRD38lE1GLkW3yr/9zI0utv94auUqSJjKTbXEpjErItsWlNpOcVqaStDzVTF9JqRmIKcNg0a9kNgWc17bJZasMOXXp2GRM4l67BrbL2BXef4yymTw1HZGoU3aMnx1FMhg+PdUsok4RiS4gp1cDIR/7IT01LSIUmdcWaH47QKVbmcSg08H1L+PwaxcR+dcl98ARJ6OzWZRPpRmGriweSSSQyfLnhBKKqFD05HqZeBdkxL0u5XDtzlj81LRZx3nXEHJ4lBpIyvkMeqt4DT4/W0SGtiP+PY2QmDI9cupe/C5tN9Fcsy6BgoxmdxX0F6+iKIqi9BHdeBVFURSlj+jGqyiKoih95Pu08QpXoJ5Rmzau2+BdvdvRCComtwWskCP1I6OTrO7wPoyMYvloG6m3uJ2stoY2lXbEbcihia9lFg76PX/wCYI2sLH/oD/6h5AMcyeSLkPETcjkNkcDaN2VMxV9rx2JaiXdiagdk7kW8TGaxMYbGzyqTypNbNQ2zVbD7WkmsZu5DrdBGcSHKBLnAmjUqTgmc1y4DDEbr6izrCvbeH2RhcYi9msLZJ1031O6PtpWmWsmAFgWSTLv8bWKRmeiAcIy0mWIuMW0G9x9xiI238An982WrnD4OhJZq1LE9pwhA+k2q6xdszqXlBenT7G61uoM1nn8wSlPHEjKxTzaiQfL/IxDu4H2WXm+wicuW36XZtrj60FM7OZdT0QKczRylaIoiqK8ZtGNV1EURVH6yKal5tdKRCQa4D0UgcGrdYx4cuL0ZVbne0tJef8YuhBZLpf1uiEGCi+lB1ldNb2YlGOLSzu95F8pKW50GWNW3uT1lv1v7l3bipSN99S2e8vJhmH3rKNSs3QnMtn7evdBHY8Mcado5KrY4G48KRdlY5dEIQp97l5imVhnW1Jqxu8dCYnaAio1Eyl+I3ciITVTN6QgJi5DIqh9QKRmOxbyqCmfKYXKotkCT3xBXYZsYSahEm+aJA+QLmJeh95T4cYT4e+yVIokoxd90OwxMvqVS9z3Ig/9OJcXLrF2fnslKTeWZ1gdjXhV6wr3tHgax7gTP2tgiEvNM0sYyXCpusTqAh+/t0eSOhjid6lBQsWVi0VWJ12xrob+4lUURVGUPqIbr6IoiqL0Ed14FUVRFKWPfF/uRNLea/zg/WcSqM1DJl0+f5nYBoRnQiqDdr5FkkB8zwDX6qFLkinXWqyqEA8l5Xp2hdUFFh5Xp1mY4msK4UjsfJuNoSmuvQaMXI9jom3MWmfHpS4+3NWIh3jsbQvmj1FvGy93NZLPEHEnElloHOvKISPDrrCJEjuuRcJHfu+zSejKdc57+LDw78bHQW3BoSHciWJiXyY2Xgu4zc83PPIebisPpI+eAkNlDInounxuVau4BgXCjScg9v9OTO8jv8YRWT8sl9uJaYL7KCBlg38WtYV6XVHnYl2WuBNdvjzH2h0/g+unY/AzCEWSPagd8mtQ8/HcTYqEcRydGGHtCgWsazZ4KGCPnENIOdh/Js3DCXttkuEr4M9QSm28iqIoivLaRTdeRVEURekj/1PciWjdetXZ6NFu87IS/WSWhFy4RQREGtm7azerGyjiV12eu5iUi4Uya0cTJre9C6zOb6FkU7BKrK6aRnktNnEchpB24l5yMgjxcbN+QeK+xH2U/X9YcEyUXe11ydZpRKoNZOIN3ImimEp0G7gTbRi5iroTCVcdkjXJsqkZQ0CkW8sUUjORIuX/tmMSQcqIaRQuPo6IStIiib0J2L9F2sloYLaFcr7PH1/wuUqpAIBBXHyMmE8al8iiQcDvlUfMEF2WpJ33YZE+uoGIxsRMLXjfAhFByyQZ4wyHz4vyIJrngrVqUm52+DjWWth/LsPnbtwiEbVM4Q5Fsg4tLqDL0OBQmY+RzHpHZEaqlPD5ovuSI1wPi1mUq00Rvcs0NTuRoiiKorxm0Y1XURRFUfrI5qVmKpEKjYvJZhtIpBvLy70lWHbAlyYjWJd0HF/nC1wKNgBPKBdLw0m5E/BLMFxBmSMtJI+lCyhRl6Myq0uRU6TtDD0NLZNGUEkRetZ937xGIoy9lnBJ0gFLJF+n8i/I08o9TjXHhuyDntyVJ6Px/7ZU7jLFyU1giQr4PXRI9B/LpskOeBcRNcNYYowRjtGM5f+3icZLr4HBI2NRudEWUY5iMv6ISNeWyfuISOQ5M+SRmMx1z7PS6uBa4vm9r08+x70z2uQErufRU7vi5DKz44lITfQFMZ+FAb/3lomnf8vlUVZXHsC1dmZpNSkPD0+xdukSjmtq1zirW7r4QlKO/QarW63j9VmYxShWU7t4kpwwpHOcVbH9i57kDkL+PTPkdHWrzRNK+LGealYURVGU1yy68SqKoihKH9GNV1EURVH6yKaFaZY8e8NISvLlld2JJBt1ybL2kD5kNg2DHHNPiygsLnETskkElZGJIdauUcPMFSmHR90plzBbkcwMk/PQxus5JJm4LTJ5UH4Q9lg18a7DIhl3zHVTnr4Wia+JzTHukWUIAMC0ib1WZBYyaLafkCQMFxF4bAvtZI7D/z+csjF6EXWF8MXUCont1s3wqDuxj5/nd7jrCXUNMulXE65XsUHd5LiN2oioSxI+G+tdl8gEtfh1lJHDFIC1GtoSHYdfn3weo/E1SKJ3AACfTI5UCtemTIpnY2t5JMKViDpl0jMO5KMNl599SbuYCWjn2PWszrFxXlTKeO7GDPm9b63g92y0eFRAO0vOBQg7dzHG7+MF2K7V5LbgVArXf9fl1zFF9opOB69Ho1Fn7egeOLcwy+ryRZ4N7GroL15FURRF6SO68SqKoihKH/m+3IkkRrxBNJ1Nap8btqIqt4kvIiE12ykiSYj/UkxM7EjKF8+dJTW8YaGM0vOlSzwhM41y1elwKSMm0mGmizJf06yxdlSJlzHhWd0GMvSGsamkj5IC1MvGEBODysnSnYhLn1SGFhIpk82ESwaNVmXhvQkMnuBgtno5KZ859yqre/HEE0l5jkTnmZ3lCb2//OX/npSrCzwK0Q37DyXlyfExVpdJ0+9GTUPCNYrKy9IdirgJsfVAuC7RKF+2uAbsRikAANAl5gRDSP/Npk/K3L2FmtpSLsqxMrJdOo9uSIVcmdUNEFegsck9Sdky+do0f/50Um7XFlmdW0RzXYoMP+3wtXukgmtmYPIxBibpQyQuGKqgfO1HJHpgyO0weZIkoSWuVeDjPMwQF9JUipsa6RyvDFZE3bXZ+HSmK4qiKEof0Y1XURRFUfqIbryKoiiK0keuLc5VT6gRtnc2HmpekIp4vEl3JdrMtPhn+STEXaPJbatdD20Bo5No762urbJ2QyRkpAncTjYzi/Y1aQ+JSaixbIT2Fc/lY+yS7BqGMPJS+8vGdtyNKhUJu8wbZM+S9t8opveDnB8QtkiHZGSRLnP1JroknD1/Lik/9dyTrN0TTz+elF85+TIfoo2uInYK+6+t8Tn+1a9+LSn//f94jNXt24U2upuPHmF1t992NCkfOoS24JHRCdaOumFId6KApBoKfbw+sXDRYjZv4FixpieSWCQzVSTDz5ILmM1ydxaHuLjR9xUGeDjG/TfcmpSndh1gdRmXZHSbx8T1rTpfM80I17TLl86yOo/YYFstXJ8tl7s1FfL4OpUtsLooRltzKFye8jm0+XbqeOahUeMuSS4Jlemkue22Vqsm5WwG3Y4yGR7StNpYw8/y+N6QzfHvczX0F6+iKIqi9BHdeBVFURSlj1yD1ExdCWTdBumJNhnwimcn2twwaKYWAIAA0MVnucqlhp1ddKEYHcUIVKU8lwjqRE5IZ3jGj3Ie61aaLVbXaOPAciRqUFrIGn6OSBSxdG25MhvJzuvrVIeWcFFUyHUkM49M/O6miDzl4lzrdPi9vzB7KSk/9/wLrO6b30QJ+Ymnn0vKl6enWbtmk0R7cvm83rELI1cViU+GIf7fTDOwLFWXWd0ScT168omnWN0Xv4Tzde/e65LyrbffxtrdeSe+vuGGfaxueBAlxXSOJGj3hWtIl1zjSCQTl5mjFMjkUN6PhRRPc87bJnezSZXQ3WVix96kfPD6m1i7SeImVFvgc/L403+XlOt1NGs4Kf5ZabIO79q5m9VdOn8yKWcL6Ko5ums/axeTPkKRFcgiEc6CQEYrxPkUNtCVSWbucogbkpPmkbf8GFeIegtdjaTrlUsidhXy/AOCgEvPV0N/8SqKoihKH9GNV1EURVH6yPd3qlmqmQaRidcpneRUM42KI1uxDPdSQL1y3TrphRxCO3fpIqu7bieeZB4o46k5OY58ASWaPYeOsbrjT+Op0QNDPKrP8QvVpByQBApmk0vZbh5PAHaBJ1ow4itL9oa4HsaGarJGrpJE5P+X66YWicAUivsxt7yQlM9fQDn5+Rf4qeOnnn0xKV+4eJnVxSF+4BiJGHXH625l7YaGyjgkk8/rAFD+OnEWP7vd5uO97aZbkvL1e/nJ5ayLD0fX4wH1Z6bxu03P4fgff+pbrN2zLz6alHfv5ieebz56MCkfuh7Lk+M7WDsa/c02RWL38H+Sk8WPEOkMzt0w5A9+mkRWKhT5aeWxnXgPxgfKSbl5+RRr990XMSra0uUzrC4Vo7w8PrkrKTtcqYVUBk9Ur1b5ied6DU/1+4Br4bhItFAYQPMfRNw4ZBFvA9PivxVXl1EeTxdwXXdcLodXhnEeWmluQmw00HTUWEMTZRBw01MmS+TqPF//V1Z5FLmrob94FUVRFKWP6MarKIqiKH1EN15FURRF6SObNqqss41t+o1Y3Mg0aZgbNDSu/CIOuS3AzWCdn+LZg06cQ/vFCMksUSLH7gEA5kn2l3yeR4PJDexOyhfOPsvqRgaxrUnOsjdE4majhbYNPy2OoFNT9oYXbsNQTIogJg5F8lK2O2iDunyZ22enZzHZ9dwcuueI5Cnw4z/+hqQ8PMxtbaPDO5PyUGUyKeezJdbOsakrDZ/X04uYrehP/utnknJ1hbs1vf3etyXld/z4u1hdyiI2r1BGncLsLC0PbXTLazzZ99IyRi9aXplnda0mutpdvHiB/J0nE985hbbCscoIq9NfAesxTHIGocsz7ngk2f14aYDV5UKcG5ef/G5SXpvnZ19aJBLU8PgUqyuN7sYXNto0vRa/p3GAZxBSImvVjh04/09dwvl0+fIl1m5XCtfPfJ5HjKI4KX5mJpPD753L0KiDfGsrVfC5HBrfy+tKaF9+6vFHknLY5VmMul1ypkKsAb6v7kSKoiiK8ppFN15FURRF6SObl5qJSBeG/He2RXOJr/N1MWjllcsAEAb4PpH7gCdXYP0LGZdIdJVRHgWHyoanzp1PygemuHwTkiPkMrpQoYCyxtAkDyh+8QIGBx8ksnNRBN5fWEVZzxzh448sHL+xoXsVdakC5WpYKKeFMXcRMAy8/8UiNy0MDd2clI+9Du99OsXbucy/grsZxBG6fMQxKRsyahnee9Pic5JGzGGSdCyS0ZMoXLZwu7DI58Xi/9spEgIpTT6rUhxm7fbvvIH0waW1KMZ57XVRiux4PJEDXR8M4G5T8brvo9B10XF4FDzbIQnuu9y1bG0a17u2h/ejvItHHLthAmXXyhB3/UoRU4CTwc82I37vq4u4TjZFAoU9OexjbhXNERfOnGDtaLCqg4duZHUmdScS62kmU07KdM7LiIEmeUbDmMvV4xP7SBnNJJfOH2ft/ACvcavFZWhqEtgM+otXURRFUfqIbryKoiiK0kd041UURVGUPnINNl60LbWa/G35Atp3LGGg7WWqlAnD16r4f4AB7mkBloVtA+KqEwRcVye5jiGd4WP0K2iXePnCK0nZa3Eb1PAg2rVK4og+zdAxIlwhFogrSruJn+WWuT2wOYPXKnBECLhRtPlGzOVj8/mJvm+3rx9haOg3S0QpdF20BU1M8IlnEHttGNDQfXzedQKPvIdjkrCILPSnLc44xGg/qq7x8HP1JtrrTBs/K4y4O1Gniy5P0/PchlbKoNtcpTjI6iDCsUQ0Y5YwW9HvHUbcDh2RLDG2g9etVOTuenGM7ws70k7Mbb4KP8Vi23xNy2QwRGKJhOIEAAgjDAs6NnooKQ9PXsfaFYlbWyiyRaXLuBYWBrBsinM8Tmk0Kburi6wuXUf78r5VdPH81re+wdo9+fhj2F+Kh5OcmsTwpF6H21azOeLGaZKzECIkpWHhtWt3uD3c7+L3PnDodjIObid++XnMNLa4wG3ZlYECXAv6i1dRFEVR+ohuvIqiKIrSRzYtNVskXI/PVSYmp5kicklE3QdYZCa+53c91IlldhbLwQ+sL5OkyCEfSKpC3Wz4OPIFlA1CGz97tj3H2rkkslQ6zTNcmEQmM32e4eW6KZSlPfrRaS5feiFG/GkuctkkPYJyhWnS7yIEzA1ciKSErwB0fbzOjky2HtAE3Pza0STbpkHmp8EfG+Yis4HWHxkorcr5SSNGPfXsP7C6V049k5Rn51F27na5VPvcc9huRmRJOnbHG5Py62+7k9VZ5LvFVGqWZgzi7maZYp6RORpFxH2r21tONoWWHW0Y2257Qk0hvjCt0ddWlmfcMUKUU3MlXINsYQrskuhMjsjaE5G1xOsQE4dYd5tNkoze5BKvW8I1tDyEkduyIjrVxQWcr9/5Dpehbz5yNCmPTkyyOpqs3iKudpFw18uSqFZg8Tl5/szppPzq8eeTctCtsnZ0Ta5UuKuda1/bb1j9xasoiqIofUQ3XkVRFEXpI7rxKoqiKEof2bSN1ydZdmTIOTdFXSa4HYLajKiN1/flnk9Do3E7hEnscl4X22XyMnRlbzu0QezQwyOYMWOlxrNkzLcx/FnjMnfXGMuhm0TATRlATMNQr6M9ZCQjwu4dxnBoJ159jtXFHRy/kbnydQPgdrKMy+0y3YAflVcAghDdwGIR0tE0iMuAwc8WUFtuRNx9DGE/sgzs0wDugmDQ/olziLTxxgba2larM6zusce+nZRbHs6tZpPf6+88iu4OuyZ3srrbjr4uKUeRDG+HEyyOiR0aAtEqJO3kAxZcsS4GHqKT2n+l+1Ak2ioAJskK1BWuNCa5jw1igwUASJP3GaTsB+KeErc2y+LnH3ySuSgC/GzP4/Ou3cHzLo7Lny83TWy51MUnxT8rncNnw/e4q87ZM+j+2RGhMW3i8pPNoS07kkcQyJ5VyHPXn1wWx1Uj7lDzs2dYO5vYkIt5fnan07q2dVd/8SqKoihKH9GNV1EURVH6yKal5mefJtKAxaWqFHG7sYRLQC5PItqkUOboBnzPpwpINxDD6pCoQTHKv4Uilytoj46IChUR+csmMt+oJ8eB0VWyOS6FtRxse6nF3YlC4l4Rk3Jj7TRrd3QvJk03Ay6VX2oTaSOL3zMQWrNt4vdO21zySNk8opYC0OliJCjL4jYCEzBTiRPxrCU8K4pByrz/0CCmFiFlG0aWlEmdyB4ExNXIEtPfInJgirhPZLMiuxVxL0lnRBQoE+d1GItE5kAzKFEpmMuXtC6WYa2oDA1UdhZyctRbrg5DlZolOZIVKBQysU1u/8Xzp1hdmswZKqWaQk42XXzdlSatLq5xYQfXI8fl5pR8nrpBCjdRck/rJKNPKO79+BhGUxOWRghIhqbFJW4aNF38PN+nUd343G2cQSl45469rG7vbsw0V3n3zybl82d5dqKXXkR3PZqNDkBkk9sE+otXURRFUfqIbryKoiiK0kc2f6q5QSQJkwdxv3gepYxWg+/luTyVw/AErhHzE3rdNolI1Rlida0GSmPNDpHrIi6zZukBupSQgkOUHnJtPDW6R0YasnCMiwY/1TxDjkqHhoxyhJfSIzL6wgo/oWdHeGrO8Pn3tGgUFsBILsUcP7mcT6GcPF99mdXlXH6aVQFo+ZiA2xYSFJWa/UiceCayGT0xLxOB0KhW7JQ0ABhAEiiYJJl4zGVimnRgfIInMXjnO+5JytUmJkI4efoka3dwLyb0Hhnkp+krQySqT1xldXFM60jUqbh3onopITMZmsiI604uk5O48hRzKBKsKwAxkXu77QarC328tmsNvt5FJPFFhUSuckUCApd4jLQ9ceK5vZKUM1lMRpAWEa5si5ya9vk9bTewj0YdyzLSUyWPkf+MiM+ZThefoWqbr8mzMyixV5cxqtvZM3xvWF5Bz4Ydk7tZ3ete/6akvHMnJpE4eOMdrJ1PrvfCAo94mE5p5CpFURRFec2iG6+iKIqi9BHdeBVFURSlj2zaxnvsjTvwhcvfZqVQP4+EiwyNlNKooY1icZHbE1otYltqcTsBzRIxPGqSv/NoIQs1dN2ornIbMsQ45tLOMWznikwVl9BOEE3sZ3WXFtDW7HvcJSOTQ9vJpYt4Pew0b3f+3N8k5YnSAVY3WMLMG1EDbQ3lvdxet1JHe87S4hSrWzM3fUu3DY0Q54IN/H6bxI4vMxeZEdphLZIk3BLubhZQlyE+d03ixmMSFyIz4DZeIC5Ju3eOs6rJKbTpv/AK2vRnZ1d4u3GcM7fdfCurSxEfpa7H7WRA7bokelcoswdtYOONoivbdeNI9kH75/dCbbzroRGpAnEtOy26HvGzCxaJVjW3gGtatjTA2hkptNfKxO/5IrYdKJexbxG5LQzxvrVafL07+ypGnVqaPY/jcPizliEuSl2R/cgkNt9MSkaGo25++L7lhWnWzjLxetSWL7K67377vyfl0yO4Bq/V+R4SePgsl8p5VmfISG5XQX/xKoqiKEof0Y1XURRFUfrIpnXJ0XGU0+r85Dr4JGqHw5UAcNIkggqJTT0yzqUGqi5U57kLTkyirQyNY39hIKQAkiDAD7ksM5BBSSUboxvPU08/z9oFRCrJVnnkkrEdozjGOpe5s1m8KDftwDE6Lo+G5Hkoy5j+AqtbvIzfxyTShW+9wto5Lt6LTpNLm0uekNgVaJJk37YIC2URidcWMr1JHg+LJNkwDdkHuadChqMRrwzyWZbJ54Vt4T1t1Lhs9eyzGP3sq3/9WFI+cYJHK3rpqWpSnn87n/9vfAMmEx+scLepmESD60Y4r4MNpOZIuHzwBAok+pWQR2MmNcvIVSLalgIxmZOWIxMQkPlkc9OF38V1YXUV15kLF7OsnUNcg26Y5Ka1bAHrGnU0n4WBXPvQzOY6fF6HIe4NqRTWWcBd5oKAmBlMMWfI70PX5huMRZ6vSHiGsnEQN6c44n20m+huePJllOV9Mcd9EoUrk+bf0zGF6egq6C9eRVEURekjuvEqiqIoSh/RjVdRFEVR+simbbyFLNpZay2ufXseavK2xbXumOruxP5lGVzHt1xsmB8UGr+HxmFq141AhO4jWZNkSLLAQrtEtYU20+yECHEJmKi+1eWZMLKDaOfID3EbtUGzMpl0XDJbEwnZJpKhr9UwFGdrCe0JY26Fj2Mcj7XnBrkbQdbhYSgVgFYXbZi2LV2BiJ1M2mdZHbHxmtKOS8qyjx7hJLsdbic7dwYzUz3y98+yuie+i/O1TZ61TIbbqs6cQxeK3/v9z7O6x7+L9ru3/vjNrO7QYXShSJGwq6FwjdrITYhnK6I2XuF2ROZ8KDK6hKJPhc81Q4S3tcham8pw+y81+foB3oOZ6Qus3dTO65PyQIXbXS9dwLavEregdJqvfROTOH+KJb5W7di1Jyl3fZzzjth5PHK2ZnqaJ6B3iOuRJ9ymmi18tiOy1spcQfRaeT6fZ55P1gf6+IpsUEGAz4MvXApd99rcOPUXr6IoiqL0Ed14FUVRFKWPbPr3cauDWVGCSEbnIfu3ONLNRFcmM/F2IcnCbNm80nSIiwORp2IhVcVU1474/ymaROagknSuVGDtUkQaLGX3sLpmgFKezNzCviepMkQWIyASu2nyi1UZRZ3PIlltlme4LJkqoqxkZfktrORHQeE0fZTmnUi6DFEXH6t3HZWaheRnmuEGdfh5vodz8uSJedbumScxsXYQcinv3vtvSco796AcWBJz1+ugNDY7s8jqpi/h533n6adY3WoH6w7diJHQMjn+DHGXISkLR1esoxGtAKTUzHsI5R8UcF181h0R7anVRhdGU7rCWXivHAfnrmEJmXgCIxI2mjzq1Lf/4WtJubqM2XjaHR75LE0yF+07cJjV+SS70vFXUK4eHx9h7QYrNPsRd9VpNPh+Q6ESMjXduQ5/lnPEhtINeX+tNq61MVmT/S6XtV1h2qFE1zh19RevoiiKovQR3XgVRVEUpY9sWmpeqGFi9kD8VKenlaX8y0RY48p//sd3kj54TRATKSDeoBP6UULGtUj/Bok8ZDs8MXQYYNSsUPy/xKDfM5LyBz19SGQ4IT2yY97ie6ZTJIrSOEojK5fXWLvmAkox+SkuHS01eABwBaDp9Y5cZZN7apv8WlpknlBzijy5TCUuaVqg76NSan6Itzv2FkxiX6lwGS6Xw3EYNkp3hogsBQbOiz0HuZnE66KkWCPJSr43Lowa5MVYF3f5taLPdgzyVPOVTzxHIng8MzdFeqr5amQyuD7JtbVDEijIdcYgc9khJ/knJvaydiPDaJpaXJpldUuLaP7IE/NfCDw63toyJut49WUuQzvk+LJDTHzydPXMNH6XYp5H16JQ6R0AIJ0mngLk1LHXFXOLhEbMuFyGLhcxCU21hnK7F/A13iXfxe8Krxwh4V8N/cWrKIqiKH1EN15FURRF6SO68SqKoihKH9m0jdenSarX2Wd72HEBgNluobd9s2d/GzRdZ02Oe9exPomd1U4JW5WFun7DF5l+jN5RZJhhOl53EQj084TriY2fTSO7lHdw+0GwQiIDCVNzx+CuRwpAs0NsvLaw4xKXIcfiidhN48pRrejfAYDd7/U2XnxNvZWKg9J+iv13u9wVyG+SPsjZBVO4P9HzD7F4AqgNNlMS0bUsbOuTyHC+x68V7XH9WQ4yJ4kdN94gclUkXPLCUG28Ep9k7el6fH7Sa5tK8bMqMVmfqBtSvVlj7Y6feDEpVyplVjdcQXc1i7iFtUXUtVIRXYEyGT4nvQ6eSYh9tOPWqiusnZMmtmBhLg1J5K3A52cGaGYkFsnL3ujZkOcTkBxxjQrEGQSaCcl2+dpt25qdSFEURVFes+jGqyiKoih9ZNNSs2H2dhlisusGMvRGAixsIBMbTMresOGV3yM+m76tE3LphUp0piUlxV49rvca2hyiDyL5Uckyk+fjCFziuiHu4DpXFwXabbxe1rrrhdKVyH3AolBxdyLpqtbbBMFesirxDJFKOe9M+saAytrS3W2j5xDltbYvpTYaTY24LhlSrqNlKWVTd0AqNfPPipirEa9TqXk9rRaJuCfmVi6HsmgUctkeqEmFzN2mkJpffuGJpHxw/0FWl3XRPS0ksnZlZIy1azZJ4hqZPIO8pkkS8nkujXeJzWypuszqXBtdhmIxdwMiQ1NXo0wmx9pliVtWKKKpBWTeWWSByGW4W1M6i9ej2+Rye0ckb7gaukoriqIoSh/RjVdRFEVR+ohuvIqiKIrSRzZt4+X2nd5162ydm7V9slCK0n505fKG3a2zQxMbNf37uiwrPca0/p09a6CXTRqEm4f8MmTMxgbf1HCwLpDfM5StlU4H7UeWxS8Q9ciRNl46l7kbj3ADo65G68KM0vJGtmBiuw17Z76CDZ411qd8RjeYd2xWm8T+Zcg53jszGJ27EQ0tKVwymDuRsOmGkU5eSUTczBzbFbVY5ws3GxoikWU1Ete400K3npPEtQgAYIhkv6LhPD2P2zcj0ie1uQIAdLo4Dp+ETE2n+dbjk3ahSEAf0W1KrMm+Tz6PuO5lxPmHDhmzdGNLp9H+a5PQj54vs/CRDGXisEih0DvM5ZXQX7yKoiiK0kd041UURVGUPmLE60PQKIqiKIryA2Lb/eJ95JFHwDCMK/57/PHHt3p4inJVnnnmGbj//vuhUqlANpuFI0eOwKc//emtHpaibMjTTz8Nb3/726FYLEKhUIB7770Xnnvuua0e1paw6cNVP2p85CMfgTvuuIP9bd++fT1aK8prg//xP/4H3HfffXDLLbfAr//6r0M+n4czZ87A5cuXr/5mRdkinnnmGbjrrrtgamoKPv7xj0MURfB7v/d78OY3vxmeeOIJOHjw4NU7+RFi20nNjzzyCNxzzz3wxS9+ER544IGtHo6ibJparQYHDhyAY8eOwZe+9CUWTUtRXsv85E/+JDz22GNw6tQpGBwcBACA2dlZOHDgANx7773wF3/xF1s8wv6yrZ/cer0OgTi6riivVR5++GGYn5+H3/zN3wTTNKHZbK4L0acor0W+9a1vwY//+I8nmy4AwPj4OLz5zW+Gr3zlK9BoNLZwdP1n226873//+6FYLEI6nYZ77rkHnnrqqa0ekqJsyNe//nUoFoswPT0NBw8ehHw+D8ViEf7lv/yX0OloOkjltYvneZDJZNb9PZvNQrfbhZdeemkLRrV1bDsbr+u68O53vxve+c53wtDQELzyyivwO7/zO/DGN74RHn30Ubjlllu2eoiKckVOnToFQRDAu971LvjABz4A//7f/3t45JFH4D/9p/8E1WoV/uzP/myrh6goV+TgwYPw+OOPQxiGSd7cbrcL3/3udwEAYHp6eiuH139iJT516lScyWTit73tbVs9FEXpyd69e2MAiD/4wQ+yv/+Lf/EvYgCIT548uUUjU5SN+cxnPhMDQPy+970vfvnll+MXX3wxfvDBB2PHcWIAiP/0T/90q4fYV7at1EzZt28fvOtd74JvfOMbEMr0WoryGuGfpLqf/umfZn//mZ/5GQAAeOyxx/o+JkXZDB/84Afh3/27fwcPP/wwHD58GG688UY4c+YM/Nqv/RoAAOTz+av08KOFbrz/yNTUFHS7XZZbUlFeS0xMTAAAwOjoKPv7yMgIAACsrq72fUyKsll+8zd/E+bn5+Fb3/oWvPDCC/Dkk08mhwMPHDiwxaPrL7rx/iNnz56FdDq97f7npfzwcNtttwHAenvYzMwMAAAMDw/3fUyKci0MDAzAXXfdBTfeeCMAfO/A4I4dO+D666/f4pH1l2238S4uLq772/PPPw9f/vKX4d5771XfSOU1y3vf+14AAPjDP/xD9vf//J//M9i2DXffffcWjEpRvj++8IUvwJNPPgkf/ehHt926u+1ONT/44IOQyWTg2LFjMDIyAq+88gp89rOfhWw2C5/61Ke2eniK0pNbbrkFfv7nfx7+6I/+CIIggDe/+c3wyCOPwBe/+EX42Mc+lkjRivJa4x/+4R/gE5/4BNx7770wODgIjz/+OHzuc5+Dt7/97fCv/tW/2urh9Z1tF7nq05/+NDz00ENw+vRpqNVqMDw8DG9961vh4x//uIaMVF7z+L4Pv/VbvwWf+9znYGZmBnbt2gUf+tCH4KMf/ehWD01RenLmzBn4pV/6JXjmmWegXq/Dnj174H3vex/8yq/8CriuzDP8o8+223gVRVEUZSvZXsK6oiiKomwxuvEqiqIoSh/RjVdRFEVR+ohuvIqiKIrSR3TjVRRFUZQ+ohuvoiiKovQR3XgVRVEUpY9sOnKVYWxuj5ahv0zyEZGBiZDf9cDPsHaZQjkp/8XDn2Z1od8g4yBDFsmVDPLZjki6PDm+Jykf2H9jUi4VR1i7XbvGcUxZh9Vdvnw5KT//3POs7uWX8XXbryblVIpfYtexyCueCSmyaJ2Bf+94rF3g+dALP0C3bL/bu9124oG3vDkpG5HB6pYW5pNyx6+zusIQxj4+dXYmKTdaLdauVCglZcvkc8aKMOlGvdlOyssdfm/cFM7d4UqZ1dVqOP9HR4aSclfc36jbTco3HNjF6mwy71ZW11jdhZnlpNz2g6S8VucJQwIyt2y793oQAbYzLX69cwNZrGtbrC5q4/dZbGjCBwCA//BXTyXl+B8TCvwTdK21gV9LcgsgMslaIu5HTF7GwEM6mKTSJr/RDBH5IbJIHfAxWnF4xbrASIl2uE6a9RlWt3T860m5OfMCf59Xw/GHOHdjJ8va2UV8lj2jyOrSIT43RvVUUr7pnrexdn/z7FxSfuH8EqszY/xu3/3yn8PV0F+8iqIoitJHdONVFEVRlD6yeamZyBVxFPesoxLp915i2zhGqe2Rv/0r1qxQKiflKNisRMrHYZn4dW45+npW99M//b8n5SOHb0vKmRSXHXJ5lKhTaX551qooa7zwApc8PvfHf5CUH3sCpZFYSJtBgK9NS8hD8tolfxb/PzKYPiR66NHHNobmWK7XuEw8vYgyawR83l0/UknKTg7vQTrmMlkqi6kkm7UaqxtMdZJyZSCXlK21Lm83gVLYjokKqztzEU0cUTcm7cZYu0IWx+U4XPKbncXvOTPNM3S1Q+yz1sLxQsj7yBCziR8KWZLOUR/lxSjg7WoLeC9sk89VO9K5K7HJ+hlJKZhqvkL/jcn9MMh6IS45RGS9iOXvMNKW9mGJcbgWSryWGIcZ4TMVBDjnu01u1mlWUbqN515idfb8s0k53eYSb0wk9tDEcmV8B2s33cZn49V5/pzvKpH3OWnsz+Drv08uT9blz0YlK9fyjdFfvIqiKIrSR3TjVRRFUZQ+ohuvoiiKovSRzdt4mS0g7llnrpO6sS2tata5Vt+sow0qhoDVUTXdJrYGmdBw/4FDSfn9P/dBVnf33W9KyvUGulOsrc2zdpl4NClPX+ZuF9ks2ugOHTrE6t7ylrck5ZdeeYJ8VpW1C4kHkevyi2XTu0HsK9yawO0tmtVxExA3jNgR17yIF7252mF1lTze79INaMc9cfISa3f0ltcl5eUqt58unUV7VcrF/ibKPAdpZQjnHTjczWxyx1RSblXRtahSyrF2XhfPULwgxrh3YhDLO0dZ3fnL6LoTOzi3uga3hY2Oo+25JlyNGjVi5yOuUWmHu1dFAd6LbI7fizDY9HK0bSCeOmCIZ90w6Mog12SE2t8tQ57B6e0mBDFxzyFzy/f4vW+20F5bqy6zurUVfB7qq1hn1BZYO6+Fa22lzF2B3nDzzUm5sTTL6pbm0cWn3ka3y/IwP/8wPYdzuR3xcxgWWYcNH6+PvB5DOZzL3bywqbf4fnY19BevoiiKovQR3XgVRVEUpY9sWtsxiVAci+hU7Ee31EVZU3I0PuJyGhNAxH8HTFpL5JZSgcsJb73nJ5Py7bffxuq8LsoQf/AHf5iUH3/8u6zd/v37k/LCPJcNjx69OSnfd9/9rO6WW25NykODk0m5TqIOAQCAifKNYQp3KAulDHbs3+IXNaASoFSOpJSkQDaHrgS5Yp7VjY9i3dmzF1ndzCyaIUaJ604Y87lbXUEJLZvlrkbZAZwLXoiPm5XnEuyah33aPn8soxhdHNIlfF+7w+fFhUsrSXlhnsvmg3mUB3cR1yUAgE6AD9wIcaEwxbxziXvdUJm74U3P4LNip3CMlQHebnkRJUXX4Q96o6mR1tYR03sgIleRNdmyuXnOMnA+0dsYiCh4nRrOi1aNRwurr+E9rS6jxFuvcTm53SKRBcWzYRM5PEWinQ24/N6744WkPLF7itUNTWEUtold+1ndGJGvTxx/OSmbLo9cmLZxrc0b/FoVySObamPdqRe5y2hjgZhkVrm07He4/H419BevoiiKovQR3XgVRVEUpY/oxqsoiqIofeQazu+TY9bCsMhCSK7bynu4uwj7Zu/D8DwzkmGg/ei6vTewdrff+mNJ2eUmNDhx/JWknHbxuPqB63gfE+No/9qzi4cdGxmZSMorS9z+e+TI0aR86813JOVz506xdjSjiIwYabIQbeRCmr1DuXGLinIl3DxeP2njyqTQFnTnj93E6s6cQ5vpzAK6TJgis8qLT2MGmdHhAVY3MoFzxiehFFsiw5FLbFJ2l7s7uDmcr4aD7UIR0rE0hPO1kB9kdQ1iy7s0zc8d5PL4fdrE1hwG3E7cWsM6VzxgwxV8vbyKrifdJm+XzaAbldfls7fVaIPCcVhYSHHWg5xbaVW5zbFB7LO1ZbRNVpdWWLt2FV+HLe4+aZAQqmkXx1HOp1m78VE8N1HIcVcgasq1ib+kmS6xdrGN3214mLvJjZZxzo/tOsrqioN49uKm1+EZjdU1/gzFz57AcsBtvOloOilbgGEtL587w9q1SHYxN+Z9OOt8sTZGf/EqiqIoSh/RjVdRFEVR+sjmpWbjyi49ADw70boMGt/XsMTPdpIkOZvF6DlHjtzMmu3ejcfOWw0u5U2OY4L7X/yF9yVlKZvbRBtxRdSdwEc5ZG2Ny3XZDMp1b3ozRsn6+t//d9au1cHj7zJJ+GYjUtlkXNLlIwhVfJak0yhVBRaXiNoNvF6OKzNJEfeWCN+XdrjUXPdR1mpWuVvBQoxJvTseyliRMBLcePj6pDwzx6OpGcQVwiIyd8vjGY4C8pyUylzKK5VRvluc5WaS6lo1KZeLeK06Hh/jMpHv4khIbSkq56OcbBX5tTJJVLqlNS5tyuxQCkBt9nxSnj71IqvrtHCuBR1+LUMf1z8arcp1eMS0ARJBLT/BI5qliDnBJiG0bLu3jcwU7owRWY/oihaKDHQWWe/skPdBs7jlctxNKJvBeb57341JeZfInrV3D9adPXuc1T3/1NeS8sXjRHqPuHzf6uB3MYTs77rXttPpL15FURRF6SO68SqKoihKH7mGJAmbRUik5MSzQU7nykQL/H3ixHOE7yuXUDK+/uAR1q6Qx9N18lRzmUTQcUjEnEyWSy9UKgnEqVEjJsHfXS6hBUTaOHojyhp79uxm7V56BeULGqkKACAm0bzaLTyx2BWyjMmkIz6O+NryMW8LPCInV4Z45KpsGusuXpxjdXMzKBPfcAOefl+piiDro1T+EhPPwPlFA01NDvI+jkziyVNTJAk5MYOnKVNEkos6/NQxjXC12ORPbB4DA8GBo3tZ3fI8zslLZy4kZTvNT68OVPCEdrXKT8eGIY55aie2qzWrrN3iEr72xLx2UuLaKbC2cjkpN1Z44otiAc0HuTyPEJZx8HS94+IcNIWHhE1fxmKdoSbEaLOndoX5jGTNoeuW/MVnkjXfsfi25HVxbvk+NyECEC8F8mwwrxAAKA2Uk/Itt7+R1R06tC8pP//kd5Lyn/3Jf2HtLi/iyehciV9vI8Ml8Kuhv3gVRVEUpY/oxqsoiqIofUQ3XkVRFEXpI5u28bKMRKFMQUSRezlJQt4rihUAsMhYBjdUUs+awyQB/cEDB1i7lE2Ov4sk3o/83deTcrmMBq833PVjrJ1Lkt0vzvPj5F/7Gh4737v3IKs7fPjmpDxOXJduu+11rN2rJzExukwkRL9n0MXxhyLSCjF5r3NtsSz9v5Sk28U5WBUZWKgb2OgojzqVI4mvV1bQXSOd4+cCxg5gNpUu8IxZkMJIaOUqJv/2Ws+yZo++gtlfal1xxsFAW+vaEs7JdChc2vIYNWg1KrO6zgrOoUKJPxtTezCDUruDNrTZaW7zTsdoU86l+RpQLKCbX7eLfSzM8meI2vwywpbnpvhcVgCGh3A9yseTrM4hbj22WHejgLjxROReyQhLZA0yhV2U2mRj4j6zUQY0WRdF9H3kjI9wl6SvDWGHpm59TXFmoBQRNypywMUy+XmBkPQfhHx/sdP43Nx27K6kXBCZtf6/LzyclJdq3G0wUxHP/VXQVVpRFEVR+ohuvIqiKIrSRzYfuYps0esFY5pAYZPHzsXxdCYvCMmjMoJy3dve9pakPDU5ztplUigBromg4V/9q79Myu94+9uSctDlktmFOZT8QhEIu1pFWWNeRBe66Wa8lGkbr8c9d7+Ftfu7b/xtUq7Vp1mdbZIg4sQtxREJJYhaB5Ypoi1dW6zubUG5VE7Ki6uXWd2labyP+/dw08WuKXxftYrJLloNnmihUcXX17/uRlY3tQMTd89fRleFc5cmWLvVZXQV8XlAKjiwB6Xs5hrKuGdf5d8l66K8mLG51NaxUbKcmeEuGcuLRDaLcA5atpSTsdxq80GuEQnfIMuKZQqXJCLTRyLK2nKLX1cFwCVriSeinUVEgg2FeY6uCnQ5lVIwayeT3/QYk+yDysRSQqZt2dtE52FIo0L17n+1uszqChXiNuXgXLMt4WZpoJmkK0x3HSKH+z6ab0amKqzdnW9+c1I+eZY/e83gGvINgf7iVRRFUZS+ohuvoiiKovQR3XgVRVEUpY9cgzBN7Qs/aEMiH9bb3vaTSfmet9yTlLMpHv7PItl+slkewutDv/RLSfngQXQFevXEq6zd7//+nybl3Xt3sbpf+MX/LSkbYoxRhDYv20V7y0038cTNRw4dTsrf/Ba3E8Qm2h7imBzDl2HeiN1HZji6htie2waPhJnreDzMokVCfy6LUJB5EpJvahLtPRdOn2ftqvP4bEwVuB3uHXfgHF3ei7bar3yN3/tXlvD16Bi3/+6awLMM4SiOf3WenxHIErPu9ft4MvEXL5HwfyJzS20V5267ifbeTofbcfMkvGoqxZ+vgJiDS1m8pqtVbk82ybwGMY7A28hNcXti0t9G4vJQm2xsyGt35TV6XdIzlnWud7a0jVyIvh+kLZi7HfHPckg2NleE6s2TWKgRyWoUiMMujz/6raT8yst8zW+2SEjKAG28h2/cx9o98d0XkrJl87MLr548jy9+Ga6K/uJVFEVRlD6iG6+iKIqi9JHNZycibgGOcGHx2fFsflTbYBI1kS5MeXQdX5eK/Bj33W9Cl5zR0ZGkHHZFRCfihyGzcBw5gpmMUmmUK1JCuqBRjlotLrU5NkptmQx/n+cTmZjIv+MTw6zdTTfdkpS//ndfY3UdIonS4/WmcCeKwt6yj2FpeiLJzMzFpJwX0WgmRzH5t+Xx+dQksmua3NPBHL/G+25DKXjcPsnqjGV0+dhdxmfIX+QS7C17bk3Ke27YyerOXsIsSY0GZioaKPK5VcyhO874Di6FLXlkDonIWJcb6CZnprGuzpV3WFnB52F8IsvqSgP4bLQb5FmwxfPl4bwuiChKeUfnriT28XqFwv2KYppyTegl24t1dwMFebPuROw967TsKxNtELmKmtkAAPIkItvQ8CCrs0mGt4j4WdJnFwDgD37/oaT811/+O94Hif53/Q27k3IxzyPZ1Rv4LD/z1GOsbmmBZ+u6GvqLV1EURVH6iG68iqIoitJHNi0133zjnUl5377rWN3iAgZ/f/GlZ1jd8jKe1mQx0YUSEhPNY2pqD6vbsQOlN6pyuCkuTTU6KLXZQnKlJ+PWqtWkLBRp+HFyarpQ4qemazV8XxjxU51OCqW9FAn2nhP5ka8/iNGRMi6X6+oeyo9UKjfEiUWHfDcp+3uRngyV2BZeE0ckkfA8nDMWkXEBAEYH8BTycpOYHUTS65vuvCkpTw6LpBUZnBerRF2OM2XWLptFqW2yxGW4pXkiwxE5dtduHph9lUTlatVEknmSWWNyJ5fQmmuoKc8vYQSqlM37CDwy7yyeKKJLoij55LSy63DJu1NDWbsg+q+E/LUCYBITVhj1vj5GxOc1k4M3ChlFDzVLuXqDiFS8We86Oo6NZWhaxyV1x8U+REA2CAGviUmid8XrJHWcrx2fjyNl4LOdIc92u8E9IPbsQi+Xbz/yCKsrZPjzcDX0F6+iKIqi9BHdeBVFURSlj+jGqyiKoih9ZNM23n92/08l5V1TPCEzENvDS6/cwar+6KH/nJSXl9Gtw5AZdwzU1sfHd7O6YgFdQCwb9X9pr7OJy4dliETIXbTlNWp49Dub5rbgN78R3X38gGdLsUy0BUQx7z8GkpSaRnwBzsQoup6US/K4+iJ5H/aXFraXoon2BFNkV2pE3CVGAShXykl5ucPdeAZcvI+TBW7TLzulpDzj45w5v8JtwcdJlqDR0vWsrk2mUKOOj9t1kzw6VS5dT8pujkedKpWHkvLIGD4nHZHh6/hxtJ/GAZ8zq/PVpLxz3wirSxVxPnln8Lu5wiSXSuP4s2lhbKvjs5FL4XOZtfkSc7mBnbaEd0xBM2utg55BkMc3aCa4UNhFqY1zowhU0SajU22UgSja4FyJtUn3RtpjFPHvQsdlizU/jklbA9c+Q7i1pjI4D+0Mn7uVEXRRapEQbC+ePM3aveUteM5pZJS7NXVbfE24GvqLV1EURVH6iG68iqIoitJHNi01j42hRDoywiPm+B38mX306BFWd8PTNyTlR/7+PH6wyz/aSuHryiCPXJUnEqBtE0lXyA5uiiTZ7nK5IiTRUHKkv67P5WTXQikvjrkrhJPFz44MPv4ujVwVUSmDyzDlcjkpVwa41HzuAkr29HsaJpdGuhEJBu75ok6j/0jK4yitWiGXoHYOYOSqQo27D7Q6RPq3UQybW+By9de++XRSfvX4GVZ3aLyclDMxzq1AuCqYKSLBNnnENDeDkneaeDK1Ojwp+NAQzqeCiNAVHcfvcvkiT9CQSuEcYo9UxKVHi8zl4cECq+sWcGBPPonRu4bG+bM8QZKL+2v8Osa1a5PrtgOXLqF5LpcVz7aBa5yUZ6kLEXVNlDIxrdtIMqZsNjrVRkhZm+VqEN3TzzPF+2jSjSjEtdyI+fPlENe1gUFuUjp6841JuUMihZ2/PM/anbt4PikXxfO1GvBn9mroL15FURRF6SO68SqKoihKH9GNV1EURVH6yKZtvNkshjfsdrldMSb2BVu4D+zZg+Efa7e/KSm32jz1Sb1RTcqZtAi7R4+kE4lfflaGjLEZcftRQDKhOFm03cZCmncBP9sQ9lmHhKgMDW5v6XV8X+LSpM4p/j2JWZfZr+0UtzWHMdb5wm3E3iCs3HalnEObjtPitp/GIoZIXKyusTqDuJpRG1qzy+fWGnHruXyc213nz+H9GSBmODPmNjnLxXuaPskzHA1U0HVhcAjnQmlHmbXbd/gNSdm3eTjSg0dwXNOnTrG60iTahkd2oO320hn+cJgxcTsSGY7qdfye3Q6WXz21yNpNTeL5kDEx/nhZzydIqI13bJifrUmRcwF54SKzYdohwuZDOpKuNwwRudm2wsYLvcdBX4uEVmASR6SYuBCJpRV++sH/JSkPiTNEC8uYyWh+uZGURRROWFzG9WFppc7qVlf566uhv3gVRVEUpY/oxqsoiqIofWTTUjNNtEyjqQAApF2UiCyLSwjHjt2VlG+5GSN/NIi0DADwzHM0sTDXE9okKkgY4DHuWITWcYg7ERdnAXziNuQQiTqb4m4RDnEFMoQcCMSlxDT5pbMdfG2QbDhSNqFyeHmASx40qXMmjdGL7BTPhhMTqTkVc3muEPME0ApAhySwXl0VcjLJpFMa4Nc5RTILTS+i5Fdvicw/xCwQCRNEm+hVoxXs3xQTtEJkxIGhKVY3NIiRqybGsQ/b5ePIkCT2ZtRgdVPjKCdXL/PvWV1Es0+KZD8aHOIRtFoe9l/r8O85O4PXtUPMH6Yw16yS7Ee1Bl8rxsr8WVQA5uYw81t1mc/dfA6v33V7eDTBfJbfu39iXeSqqPdatdH7etXJLnhmNdJO9BERt6Ag4C5/AXUBjGVaO7JG06h9Md+j3nzXbUn52O23sbqXT15Kyv/3//MHSfn4iRnW7uhhdI2d2nWA1QXe5qT9f0J/8SqKoihKH9GNV1EURVH6yKal5pRDTl2KU8dUhjYd3mUqj9Kw79NIKzxIPD3he0YEp66tocQSBBhpKFwfNTzBSfFxOC6NBIUNHUecTiYnVKNQyAfkSJ1liUtHmkYhfs845gmSHRJcfnCEy0O2jdJzlkTX4nINQNjGU7W2SB6e00Dz63j0ieeScjrNZdbrdpGTogY3LSwsoCyaS6M2vGuMRxy7OIftpIbWIiaJ4SNHk/Lo1A7Wbowkz6iIqDhTY/isFHJ4v7/9jW+zdsuNuaScL/D/Uy/PYBSeUIyxUcPTyykHJ3K2yPXwgRxeK8vga0DQxlOdWXKJ2x7/sLUumo2CNq/zOnoifz347K/Vqqym4+E9zuf5vHYncN2hHhLrct2TyFUbycmmRduJ0+d0HTZEEgPalpjIaFIZAICYrLUyz0vcpUlnpNRMJGUiO5viWTaICTSV4WPcsQMj202M43M4Pldl7UISyW337utYXauuSRIURVEU5TWLbryKoiiK0kd041UURVGUPrJpG2+hgMfTXZfbLXlkKW4n8InuHhLbZzrN7UdZcvx9bbnK6jptjDYUE509EtlTaFLkIOAaf4rYkG279/83ImJDMDZoZwhjSRCgfYoe0TctaSfGPgcqPBKN46JdN03cnIKQuwixLCI+jy5kqY13HXky1S7P8IwjRWLvSU+NsbpOC6/tuYvoWnD7IW7fyWank/Lpc9wFYZWcazh+Dl2SRoktCQCgTDILjVS4jbcwgF+gWUVbUo17DEHLx+dk1+BBVjcxRc4M2MJNbgavQb2Gc80hWZEAAAYH8PrI52t4BMecJ8HBZha4wc4n8zNu8Ahg48NXdoHZzvjEdTMIuItMSOyis/NLrK5cxvtBo6S5YkmjJlnDlNmPsH+LZTjidtYUOU/j+7zOstH2TBK4gWOLsy8mTozA43PLI89h1OXrXWBipySHPdRFhLoueTZkVrhuiG9MkwMKwyMjrJ1Fzgm1O3zuyix0V0N/8SqKoihKH9GNV1EURVH6yKal5kwGIy65rtOz3brY3EQOofJyPp+HXjg2d1WISfQfKi+LnObMpUdGP6FRWRySqMA0e8vV4mQ8Sxq9PgIM9r9uXKx/fF8hX2Z1aXKNaSQX3xfJ7kmSClfIPoEctAIToxj5aXmNS1AL89Wk3Glzl4CJneju1fDwfa+eOcfave7IvqQcCI+YE+dRej5+BqXmpXmeTOGmV19Nyq8/ymXiG27BRN0FB5+NI/sHWbtL89h/xlhldUYZpe1Ch8+RbO35pNxo4PdMufwZ9UkEuaGp/azOSaN0OHPm8aQ8umOItSuE+Oy1V7g8OpTniR0UgDqR40OxsORzKM03hGw/M4sRr3IkAttIhZsPYmK2onIyAIBBF3PiCuQJuddK4T2ttfg4Cnmso+uWBcLcQdxVWx2ecKDpYZ+tJv/sKCYJb0jkv8uXZ1m702dOJOWfuPce3gcpj47jfPXF9pgi+1ezxsdYq2uSBEVRFEV5zaIbr6IoiqL0Ed14FUVRFKWPbD5kJHHH2SCyGITC5mgQuwG1rdIyAIBFjrJns9y2ZBObb9cLyN/5QCySPci2+VfrlfBZhj9jrkYi6zLtQ9p46fg94kLSbnObYrOBNgpb2LKpHb3rY8YYaeMNaUw1aWsGRTIxVk7KrS6343ZaeK9OX5xjdXPzeA+yZFqsLvIsMRdeQZvvzXt5GNAsucWnz6HdaU7Y5GrPvJKUz128zOr2vXQ8Kd+6f29SLmdEJqQ1tJl6dW7jtUs45smRXaxuaRmft+kOuka1FqdZu+IIhmuFuMbqYsB53SUxKYuDo6wddLBdweD2unxR5hRTqiSbVqfDr1cz2yZ1fF5fuIRzqEzCz+7ewednuYhrTjrFXXzoGkfXpkDEdLRICOEgEOs/cSG1yfsck6//7gaumxcv4zmJv/v7f2B1Xhc/b2gU3d1Mh3+Xro/X5+RJPq9t4jZnkH2jMsKzx3Wa1LWLX4PaGn8erob+4lUURVGUPqIbr6IoiqL0kU1LzTSKUyB8JkwiSUQiE7JBslDQjD6GkHEzRJN73Z23s7oOiUKyQBJpj7ncnSLnYv/OOqmZytD4XSxb6uZXTtz8PahbEx9/RFyeqNS8UOWy5JlTK0n51eOneB9EUjZCvG6xx/9/ZJL+7ZhL2THwLCUKwGARo4BVDnE5s9XB+9ho88hA8zN4r2yXuqDxuXVxEedkK+b36o1HURreP4yS31efOMnaeUSePbfA58zsEr4+9eqFpFzIcVNFIY3jmiLyOgDA/sPYdqTCI0QV8+T5tVCiW17hLk8DXZTH41BIazmcd24er3emwJ9RM4sSXRTwPqZFNhgFoFGn7kShqMMoY5FIi2WRNW5tBUOcrSxWWbvJcYzilMvwtaNKssJ5Hsrc0syWzuCcGRng7kojJYygFXpEDrf5czg8jjLx2CSP6vbUsy8n5eOvnGB1K+S7ORmc110RWS0m6/o3v/kUq/uxN96NL1I4Ls/ncjKNGCgjt3ldvg5fDf3FqyiKoih9RDdeRVEURekjuvEqiqIoSh/ZtI2XRg+TLkMR2b/DkNfZNtrGDKDuOLz/TBbtBOkMzwoxM43hz3xyXD2WNljS6fpxkHCPG/x3I97IIYdchG6X6/9eG98XEnsvda0AAHj6ObRXvHqC2yt270J74Njk7qRcrS6ydqdefCwpR2sLrM6JNT2RZDKPtqu6sJdbJCvKm24/xOouzqGNc3UZbUlnZ/g1p1mBFoVbx6mL6Lpw1214f80Ut8/+1bdfSsrCfARg4GN6too2P7PObdKVEtpWF4Q7UWkSXSPOX+ZzxAV839wS2l2bAbdbLVXRpri4xPt3SGahXXfclpTtdIG1s3No517s8pCRMqOMAmCTLD6ZLHfB8UkIxnSB22dtB+dMfRXvVb7Ew3I6Lr4ulcqsrlBAe227RezJ8nwLCSFZFvc7T8I4tkN8NlYaPMRitY73/uJl/nzRtmHI3YRKJdwr6iSkaXWVZ3Sj53Wee5aHfF1YwbXcJWtFLDLLWWTf67T4cz43y10Rr4b+4lUURVGUPqIbr6IoiqL0kU1LzVFI5ORAutmQJMYicgkNUEXlZSlX0DoZqYlGmqIZjuSx9pBEEzEtHtWHZgWSn02h7lBxxPtnnyfcRujxchrUJJPhrhu5LI6fyusAABGRueeWidwistvvvuHWpDxc5EnT7XUuUMqpSygDpfP8fnSIi0BKRO4ZKKCrRbOGN7WQ4e1s0oecF6dnUfKqP4pmhpuP7GXtRoZQ1rs8u8LqskT+gohkexHPiUketqrIZHOZuEYVRGKwiJhldhI3JG+AX6ugg99lbGiY1RWI1Gll8X2XpmdYu2yZRAOyuNyeyml2IkmxWE7KpkhUH6VxzRGBoCCMUP5NkcxRQ8NjrF2ziS5DzWke0ckiU9k18V5lM3zNGZlAuXdQZD+yyZqZruCcGRKmFrprNIWMW4nwfbUad0Gbm8d1slVF00tGZL8rldGtrVGvsrrpaYzyRTMvBTF/hjJkfRgW81/ue1dDf/EqiqIoSh/RjVdRFEVR+simpWa/i7JGJCRYKg3H4sQzPV1MJeNASGEmOV0qpWaKZaPcYsrEzaSPdXU9ZG45XiZJh1KSjkidkHRji9SR7+nz/gcqKF/6Pg+U//Lz303KLVrn8u8yNDCRlG858DpWt3fX9aBwXjqPEhqN9gMAYMYoH43v5EHRDfJ4rLVQ4rJEVLSRCr5vepmf9vV9lK5W62hmaLT40eWDe3Yn5WqNj7FNouK4KZRjMyLJRkwCwZcKXA5sNfGZ8sXzSwPK58mp43yOz91SGSMKDeR55CF6yv/5k2eT8vHjp1m7YgmlSFdIp7HZ+7nfrlDTVyjWRboWRiFPoBCThAT0bi8scg+JtdUqecX7HyWR1mwHx7G6ytetMEC5utXk879FksTQyFvSsyRDomblctzEkc3inB8Y4PN6fgm/TwzkdHKKn/KmORPSwsTXIRHZyiX8bOkgQvevjkh+w9x+NoH+4lUURVGUPqIbr6IoiqL0Ed14FUVRFKWPbNrG2yWZGmTUKWrHApElIyK2hhhQW4+FS09MsgfJLByOg7YMl9g7hccQWBatE3Ys88pRs2Lxf4+QuIZIWzYl2uD0uEujdYkIV8UStV/wunoTIyVRm0ro8XbzlzCK0lPz3PUkOPUiefWvew9yGzE2jMnYV2Ge1Z2ZrSblleMNVjc1ie/zyBxvC3eH2MH5mi9wu2spS21XaKsaLPAIP24W51q1zpOV02TokYFzK5+RPiTE7c7idddN4bmAYorb6NIuPkjVAo6xLqJw2aT/1Vluy4uJzZfazAZL3BbsGvjg1BvcLmmn1BVOYpD1VCTFAofYeC2HX2fDwLWWZtWhWYYAAPLEtyyb5tf/wH606ZeIu1joifWZROqTZ2u6Po6LRtqqNvkcXF3GKGZL8/wZ9cl5oA4P1gaLy3geIpUjUb7yItNSDfsPunzv8UinbToug28wYYTf2/P4QFxn01spAOgvXkVRFEXpK7rxKoqiKEofuQapmRw1N7jO6pOj7FTuBVifrKAX9Oh24HMpw3awTze1QbKDuOcLhkHeGAnNmMrL8TqXpN7JIGiUE5NIFI5w+cgS6bEyxJNBBCbKjxFxrTBDLvlR+Sn2eSQXf463VQBmL6OEf/89h1nduTWUll45wSUu6j5WGSon5VaTX+OIuKTls9wVIiIRhKKgdcUyAECKSIXXXzfF6rwORhuaW1wlf+dy167dQ0k59ri7w+AgurE5DpcU4y7KdbvGUK5rRNztotXB53JeRBDy6yhtu8QGtHNslLW7OIv3oi1c7bg4qHwP6sbJa2JSR5PRAADYFi7tVP4tiIhONlnTMi5fd0tFnMv5NFl3Xf5ZaRLVal1MwwhNF50uma82X1sLBfwsKVd75H2LS/zZq65hHTV5NhrcbGQ7OMZOh7tNtUhyjg55pjZKN2MKe6tlXttvWP3FqyiKoih9RDdeRVEURekjuvEqiqIoSh/ZtI231aT2JG4LoFl1bOHGEAY0fCIN6cj7J95EEIpQjakU2r9sYjM1xfl6amuTySJo//SQuLSbRCT017psIORrB4F0m8IvRF2lDBF3LJNBG0tp9Dpel8fQg6UC2iuMQIQ4W0P7mhlwV6O1WPhYKcxFYKnKbZ937EE7+0iO27++9fTxpJzLov29PFxm7SZLaJ0MxL2KSBjTUoncG5NPPPqurAgR6ro4/xdWsD9b2GrzBWznmfx7xj7acSuZAVYXEvtylmT/anvcFtZo4XUs7R5kdXPE9tas4pxMZ3nGoYEB/Ox6i7skNTrcLqcAWMSVUtoR6XkaGfqWJEtji7zM6GYTV7Jyid+rtI2z0iBnXxxTzHGyiBqmcOOkLp42zt3Bcpm1C+m5lXXnbnBc+eIQqzNJxqClVVwXO2JdDLq9zxoViC2blkOxiUQizDEbh6XuRIqiKIrymkU3XkVRFEXpI5v+fVyvo5QUxzz6Cc0KZIDIOBKiXOW4WJbRqeIYX3dFZJRcFuVlKl2HPpdxA+Lm5Au5mkoejkGzerBm7LNpZBgALi/7Qrpg3kVE9omF5BHHKMUXBvexusldP5aUcyZGK7KhzvsYQMmv0+SS4uXqMiicffv3JOXZVX69pkZxXg+XeDSpPbt2JeUacZkbHOYya8HCObM4x+XSBokUVBpAU8J4kc+tNnFxqC/w7ES+gfN/eBCz+0Qhl4INmiFF+HWMVVAOHxvmkuKFy/h5z57CbC+hkC+bJNJUUzw4q0soG9vEtc4PudvU2hrO5TDgriFBrL8DJLZNTV/ChYVE55OZdEIii9L3meK3lklscLksd+hyLZx3DomEZcbcnBgY+EzZIpygSdbQXAbnnYws6PtoygwCPrdC8toRWYAmJ9HVLibruufzcXgk8mIUieeGdEmvlcyS5/vUtUtsHNeIznRFURRF6SO68SqKoihKH9m81ExOhoYhj5hDFVlDhJOKM0SuqmPZTfGPptKIjApVIjIKleTkOTUmedtce3FdlEpCImvL8CTsRLWQ8qg6Hvji1Bw5yUwTLQRSaib9Z7L8hF4nhVGV5mso3cURjxLkmER6KXDZx89pMnFJKofXq7G2xuqeP4X3qljmM6raICctXZyvQ0NckqPB2nJtfr/TRPKiCcRH8iXWbnIUT1RL88RJIgXTE/OZFD9dmkujlLcwx6NwXajiM9upsCp45eRcUn751ExSHh3nYyzksf+VBpeQY5ckECfRulYafD7OkZOn3a40w2wuyt12gp5ClmsrrRMBAyEmkq9J1sXY5BJpPo9ycl5EpDKJrBuT1TYCfk9NwybtuBQckjG2SDQ1KfdmiOdKJORkal6U0aRSZMxZ0ocfiCQGJFKWmHZMUqYRwGyb71HUi4YnBrp29BevoiiKovQR3XgVRVEUpY/oxqsoiqIofWTTNt4lYnN0ba7BF0nS4UBE92h1UNf3iO0qD0XWrlZHm1Eux4flhcQ2QDKahAZX/KmdIyOSGMckCklI7GSWiE5lkUwb0gYVkc/riCT2bZLVwgxxIJ6wBYfEbjyc4ZmLRkgS8tUqul14MTfKdUj0Lsvh9kYTeJ8KwMIquq0skMT3AAAzDtbt2s1tXIt1tIf5XZyT9VXusmU5xE6c4fNpuIIuStMkutPLZxdZu9fdgEnHr9vBbf9+gPPphVMLSdk0uVtQNos234sz3K2pshPtX5MFnjHo3IVvJOUoJs+esLVlXOJ6ItYAN0uiZnVwvLPneXSqQhHtxoOVMqvrtPhZBoUjbeAxdb8SrkY06xAQG69ICsTs9tKC6hFXOGrvlLbPOKRuTdJNCPuYXcSzBH6Xu/Xt3IEZuQzhCtqskzMOwg0pncPnq0LmU8dfYe26ZP03Lb5Gug4+9yxLntjLaOAwmUEplv5cV0F/8SqKoihKH9GNV1EURVH6yKal5jhCCS0QCazbTZRPLSPN6jwPf4KnXJQJ2nUuQbXbKCeMXD/J6nwq45Jf9J0uP5KeTqFkEIhkASY5km4wzYAfr2dBviMZnYokeZD/ZyGRTAIirzc7XBpZbWGfayGvM0iELptId47Dg/eDja/9iN/CIBIhixQIArxGHRFwplAh0XRcfi13jKJ0+9yL6GYTF7ibjWPhvPDqPOpUtYry6enLKFEXC1wmfpaYMY7dtIPV7ZpCs8xMFftfWeUuPSur6Cq1WOV1j33nyaS8+7o9rA7SxNWug89lVri7uS6O2bb4s3Hp8mxSXq0R81LE5bpcGud4u8WvVSHNzU/KxtDkBJF47slyDWTZBZFXg92DoM7vVYYkuHAjGj1KmviIGabBo5GtEPc9n7iJtlrcHefyDLq/5TN8D+m2sM9Mnj83roOfnc9jObXGo/15xJQp3bLodkCvqS0SH1D3LSkty0iMV0N/8SqKoihKH9GNV1EURVH6iG68iqIoitJHNm3jfeS7mBS8UuI2x8kxTCZeaAsXhBwaGyoOhpXzu1yDHxlBlxnqPgEAEBBTUI1kSbJE9qAC+axuSrg7OPQ4OQnDBlybdwDtya6Iw2aQyyVzIodddOuZqaGt+bGnT7N2J84vJeXZFW7jmiUvzTxm3bDE8fcoxHEYwsXA1P9KrcPz0L5z6AaeEardISEMYz4XMsRVy/OIrVaEnRwaxLlbzvMwjl6Ic9Ig5x/mVrktrENcNwoZ/lhOTWDyePqcrFS5S8alGZxbprBXn7+ANupnHn2S1XnE5cMgLiWRCItnGGhfW65x159mhyRDt/E5z4gQpvT6tFr8GqyK66pwm+N6jxU6X8WaSdaniJyFyVrcfhqSZ8NN8zqb2E9jYt/01s0L/LDFJe5qt0psq7ZL+jf4c9Jskyxe5TKrqxC7bhQLd9U2us1ZJGxpSoS/pCGJwei9SNKsQ5G43qZBw3DK6y02hKugy7SiKIqi9BHdeBVFURSljxjxtYbcUBRFURTl+2bb/eL9uZ/7OTAMo+e/6enprR6iolyRJ598Ej784Q/D4cOHIZfLwc6dO+G9730vnDx5cquHpihX5dSpU/BTP/VTsGPHDshms3D99dfDJz7xCWi1Wld/848Y2+4X72OPPQZnzpxhf4vjGD74wQ/C7t274eWXX96ikSnKxjzwwAPwne98B97znvfA0aNHYW5uDn73d38XGo0GPP7443DkyJGtHqKiXJFLly7B0aNHoVQqwQc/+EGoVCrw2GOPwR//8R/D/fffD3/5l3+51UPsK5s+1fyjwp133gl33nkn+9u3v/1taLVa8M//+T/folEpytX5lV/5FXj44YfBdfFE6IMPPgg33ngjfOpTn4LPf/7zWzg6RenNn/7pn0K1WoVvf/vbcPjwYQAA+MVf/EWIogj+y3/5L7C6ugoDAwNX6eVHh2238V6Jhx9+GAzDgJ/5mZ/Z6qEoSk+OHTu27m/79++Hw4cPw/Hjx6/wDkV5bVD7R/ez0VGeGWt8fBxM02T/mdwObDsbr8T3ffjzP/9zOHbsGOzevXurh6Mo10QcxzA/Pw9DQ0NXb6woW8Tdd98NAAAf+MAH4LnnnoNLly7BF77wBfjMZz4DH/nIRyCXy23cwY8Y237j/Zu/+RtYXl5WmVn5oeShhx6C6elpePDBB7d6KIrSk7e//e3wyU9+Ev72b/8WbrnlFti5cyf81E/9FPzyL/8y/Mf/+B+3enh9Z9tLzQ8//DA4jgPvfe97t3ooinJNnDhxAj70oQ/BnXfeCe973/u2ejiKsiG7d++GN73pTfDud78bBgcH4atf/Sr81m/9FoyNjcGHP/zhrR5eX9l2p5opjUYDRkdH4S1veQv81V/91VYPR1E2zdzcHLzhDW8A3/fh8ccfh4mJia0ekqL05L/+1/8KP//zPw8nT56EHTsw7eX73/9++PM//3O4ePEiDA4ObuEI+8u2lpr/23/7b3qaWfmhY21tDd7xjndAtVqFr33ta7rpKq95fu/3fg9uueUWtukCANx///3QarXg2Wef3aKRbQ3beuN96KGHIJ/Pw/3337/VQ1GUTdHpdOC+++6DkydPwle+8hU4dOjQVg9JUa7K/Pz8FZPF+/73Ejhca5KBH3a27ca7uLgIX//61+Gf/bN/Btls9upvUJQtJgxDePDBB+Gxxx6DL37xi+v80RXltcqBAwfg2WefXRdl7c/+7M/ANE04evToFo1sa9i2h6u+8IUvQBAEKjMrPzT86q/+Knz5y1+G++67D1ZWVtYFzPjZn/3ZLRqZomzMv/k3/wb++q//Gt74xjfChz/8YRgcHISvfOUr8Nd//dfwC7/wC9vOXLJtD1fdeeedcPbsWZiZmQHLsq7+BkXZYu6++2745je/2bN+mz7Kyg8JTzzxBPzGb/wGPPvss7C8vAx79uyB973vffBrv/ZrYNvb6zfgtt14FUVRFGUr2LY2XkVRFEXZCnTjVRRFUZQ+ohuvoiiKovQR3XgVRVEUpY/oxqsoiqIofUQ3XkVRFEXpI5t2nvrkJz+ZlKMoYnWmifu3DAuWyWSSMo0QJX1naR+Li4usrtVqJWWaMNn3eZixIPCTsuM4rI6OuVQqXfFzAQBWV1eTsmEYrI76msn30e9Nxyiv1draWlKm10b2kc/nk3K32+05xkajwerS6XRS/sxnPgMKwHt++dNJOW+cYnUFeykp28Eaq7NzOE+auZ1JeXmZe+CtnX00KQ/k66zOyBSScmDfhP2FKdbOrL+IY0rxe5opl5Ny1sZnodNe4X1YnaS8p8znf9PDudYSj71l4FiM/HVJuRGXWbs4xmfWjPj3bKzhs70SXp+Uw4g/5248j+VMntVlC/h5f/Qbmm0JAGBq11hSNkW4AcvC9c52+VrVbuL61KzhupLN83lhWbg+GWJNk2vXP+E6KdGOfG67ydumHNIOxyHX5zD0yCv+Xei8y2R43l6vg9cgDHE/MG0+do+soYH4WjF5HZPPjtaFscQ607B7VcHKPH8ur4T+4lUURVGUPqIbr6IoiqL0kU1LzZ0Oylgy2BWVjV0hIVB5lr5Lyqe0DyotA3DJl8oJYeizdjTDBRcrACKiJ3ieR/7Ov8s/ZcsA4JLx9+qw/06n3XP8noffLY65rtFu43WUcjX9ns0mSjZ0TADiewo5XMNfrsdu/GVSTqe5fBSndyXlusevZcYZScqdCCU/y7rM2pl2OSkvVrkEO5IZSMpDY6NJuShkrA6ghNZq83nnOLuTcjVGua7lc0nLbp1OyhfbVVaXzaI82LDKrG5+BeVwt4if5ZYPs3Zg4HwNGlyyT2eKSXkgg+0ac8dZu26rht2leWaldjQOCoc+6zZIeZZIn5YMQEjWCBPrDIO3i8h8MmMp8eLa1SVrpmnwdSudzpL3cBk6BvrZtG8+DkNKtwRqgmu3+bpLZe6Iv2DtHBf7z6W4ia/b9a9Ybvu8jyikY5Z74LWFvNRfvIqiKIrSR3TjVRRFUZQ+ohuvoiiKovSRTQvTjSa6OEQR17fzOdT4pV20StxnYqKRe90Oa7dcrSZlaaXM5dD+lcmiC0Kr7bF2HQ/7TKW4rcEnNmWvg2XL5p8WEHtqFHI7HLWndjrcDm0T22oQhOQ9wm3Kwj5iYScIiA2Z2rnDKOzZLhDuW9IerACYMc6Tco67qkUxXueoyd143ALaa4lpHuI17naUyeM1rwzfxvtwyP3uoC3VCpdYu4yLczxb5I+lO0Dsv03sIyXccazoXFJ2HO7WMTyxOylHzRKry3toK257mKh8rbaXtYsjHNdAZozV5VPoJjQ3cyEpe90h1q5QKiflyaFVVlcuPkpe3QsKAF0Ng0DaRbEcx/KsB5bzBVwLxbESiGK8p2HA1xJgtlw6Dm77pOZaabvtENtwJoPjkHsIPReTyaRZnWXRdZefDfK72E8qg3tPKPqn67Pv8z6oDZmu8bbD97JuiO8zxSEiN8XbXg39xasoiqIofUQ3XkVRFEXpI5uWmukx7maLH+mmIVW6MtpHSI+1Y7tGi0vNL73wUlIe3cUlroKJklp1ZgHHUauydhaRRnLlAVYXEdejNDmVbwvNwDZRRsmmuVyRJhJIbGdZXYdILIaJ3zkW0bWAqDTdbo1VuTYOjMrVgbymZMheh19HS2pJCuQrO5Jyo8NNENCdSYpWmpsuICCydOM7SbE6z+dMtYay7lCJu/gUKzgvQv98UraFCSJXwLnVbHOXJNdH96V2C/vz17hZwWzi+4zhAqurNXCMQTDP6mIf54zjo4RcXXmUtTMr6F7UylzP6i6fQ/ndW8XvNjDI53jJRnk5vfYqq+u2qIT5G6AAREz+5RJvOofrhfAq5K/ZXBMNYzKHYuneSOYFkV2ly6JNzHWttnRrwtemeWW3UACAOCB1YrkLyNodhPwaBMQMZwY4Xsvh44jJdeRuQQBRhJ9tWWRzECY+ZhoUlzEMrs3Ep6u0oiiKovQR3XgVRVEUpY/oxqsoiqIofWTTNt4UyXozv8BdMupr1aQ8uWOK1XkRauarxEVmZXGOtVteQruTZxRZXWYFdf12Az874/Jj55kShuRzciOszs1jnyYJ7xV1uV0vCPB1TYR7rJOm0sWHiv7Ublyv8e+5NHcpKadcfvnLJbQb53P43SxhT6BuTrYI0SlDSCoApv9EUp6dFeEYTeLGwL1sIEdcLcpDeM5gYUWErWuQrFsD/H4MVJaTctZA+2YI3CZUrmC4xLTHXXVaLbTXFk3sz4tnWDsf0M66VONh8TrpAzjeHA/V6AUYatIu3JyUK1MHeTtA+3gz5s9onEY7er6A43LS/CxEM8azF27M7b/F9DAoHMuhawQ3frop4qq2QcYd6i5DQyICcHvtuoxrJOxiTMoyPKJJzu7IMyYmceukrqaOcNUJfDyD0GyIDEfkUI7MoBSSkJdx74iR4HvkzIzP126bnK2JiKtUINyrLPI9bXENvK7aeBVFURTlNYtuvIqiKIrSRzafUoG4y7gul9OmZ1Eycsp8L68S16PmErpaNFZ5hpeQ9D85wOWpkXGU3iIDJblQZI/odImc0OLRhboByQpEjoz7Qmq2gLp/8LrQxz58cXycRo6xiIzSWOPuJTXiehKLM+mLq+gOkkvjrXFt3i7rouQxOFjm49fsROuoLuL9Dv0FVuf5eK+6wSCvA5RFiw5Kq1mXRy3bNYT3WATWgeVFcu9yWJnKcjm5toqf5RS5pJjJ4D1NERcPP8WftWUfzRNhyMdomjh3F5arrK4VTCTlYuk6HIfDJfXB7l/hOFKTvP8pvMb1RTSn+MDd3Uwf53V9lUeuWhbmJwUgJJHoMjmRgJ64xfhiLWyTBPFUFpWR+ui6LoJOQbguEfyVoe9j7jgAEEXYh9ehMq6ICkhcMF1uJQGb9Cll4pSJdTQyVixcrzyyljtCJo6Ji1JsBKRd70x70n/rGr2J9BevoiiKovQT3XgVRVEUpY9sWmqu11AGTaW5FuBk8Tjo5QUu8Trk5/l4CaWwRRFBKPTw9a0Hr2N1xTLKctNLKE/5Ntf1Uj7Ka6tVLmN55CRwRCK5tDpcTqb/E8k48v8lJDG0lDzINXFtErw+4FJbhpxk7gh5yDBQ2ohJQPRWi5/y88ipacvktzAtTpEqAIG9D1/E/FoWMuQeZCusbq2LJ/SDLkZtWov43CoVMDlBybzE6urzKG0H5LR+usQjq7WJmcSs8z6iLr5+4QTK2tk0lw3TeRz/8jzXvmYXMPJW0+cRo9wSysZuHq9HrsCl9zDEa2e0v8rqhidQsi9fh/0tLpZZuwsvPZeUF2a57D+5k8vvCqfdFrI9cXeIpE5MCMjal8ny9cGI6cnl3p4aATm1a5j8s0zyOor4vOsSqTwkJ4b9Ll/7ckV8Xcrz5B+1KvYRi+PbqQyumfRUdiQiXGVJ1EF6ChsAoN1EkwpNRGHKdD3EnOiLU8yuo0kSFEVRFOU1i268iqIoitJHdONVFEVRlD6yaRtvl7jdhBHfrxt1tP8GJj8mns5iEu/xCpYrBR4V58RJEl3F43bXuTl0PZqewwhXq1WexSWbQr3fFhFObPJ/jJBku7AikViZ2Dk6wuRBM1C4OW6HyBLbiUOiZKWFLTiy0Bbg17g93DWw7WiF2BtjnmmGHsXvikHOzfNoQArA6uxsUk4LW8zQGM6ZdsTn3fIFTOheX8Vrbjl8jocFtAXnSvyRsoFE60nvTMp+WkZ4w3ndneHzojazSupwDo4e5d9leAeOy+/yMFwheX3wOu4KlCui7ardOY99xNymGPjYx8wi/56dLtprB0awv7WFHGt34RLa3oqjt/JxDPNIdAqAQ9a0tsjoliJuMekUPzNDE9BTfx/pIpQm/ctITTY9P0K8Z4KAr5lRjH3STELf+2i839QDJ45F5h9iP223+XPokwxvbprPeequ1CChBU2Dr//U1YjadAG4XZeayn1fZP8KSQYlERrL2MDGfiX0F6+iKIqi9BHdeBVFURSlj2xaam42SSQcEfkDiNSQFnVWgC4IJkmYMDbOpeYOOZ49PXuR1c0uo3wakiPetTqX5C6TpPC5HJdnHSLx0uAtMui2RdrBuqDhWI4t4Q5F/g9jkYZZIjsDAKRL5aTspnhkFIfIJkXSLpRRUsix/E6bRyiKomuTPLYDa+QSeTGXj/buQXlz14Rw/Ypwfl24iG48zZC7Aq1ZeM3TJk9cUMrj/LeIHFhfE/eJPF8TBe5Ws/vGPdjHjThHmqGIztbBz3bT/Lsc3LsLx1issrpaHeeT1yTB8CMeXW6YmI3KIp/B6hq6081O43ebPsv7mJgoJ+VShT9fDnAJUAHwPZR11ye7x7V2ndJJ/kDXuMDnMnEzxNexkIkdF+drisxdv8vl6sAnUq0wQxLPR2gT+VtG2ItjfJ/n8S9Dv6f8rRgSVymD1FH5GACgS9z1OiK8nMHci7APKVeHVIoXrlcxiJB1V0F/8SqKoihKH9GNV1EURVH6iG68iqIoitJHNm3jLZXLPes8j4QCC7ndErqofVc7JGxjm9sTImKHSDtC/w/R9lNtoC3MtnnoShqubHmZZzoxiU3BddGul89yW3A2R9w/bH50PZtCl6G0CGvm0ITVBrEvyMTQ5HVO2H8DEhpydY3Y70SIMzuF39sQY0w54vorzO5drXPbjw8jSbnjD7G6HXtJcm4fXYuq5/m9L+bwPpZKPJxk3MTXGfulpOz4vI/2As7DizPcncIp4T29/nZMaL975HrWrt7CzF21tdOsrt3E773g7WR1XQ+/d9E4n5RTwsa7OI/XQGZh6jbw2fBJJqR9B0ZYO5vci4tnj7M6s6JzV0LdZ2Ryd4/cBOnGY5E1NE0SvQeik4CEbpQRIy2L2F2Z26Jc03CMmTSf1/xpw3nhOnzryRdw/jTqPKxri7gTRSJhEs0sZJJQwKbI6Bay9EG8jkahpGZdx+bzMZ1GO3fY4ecRXPva5q7+4lUURVGUPqIbr6IoiqL0kU1LzQcP7E/K9QaXAtbq+DM+6nApwyM//1fqKBNnBrgrxEAeh+JEPOrOwT0oZVyaW0rKNRlaipxd73jczYYeIe96OP6uw6PluDQpcpfrafkyyigyoTR9bRAp2BTZjwISAcxv8+vod/B1TI6u22k+xphIJWEgI8WILNIK1FYwe1CxxOX9hZXlpOwBz8bjZNAFxy6iHGvBCdbOJG48YxXuCrQWoCuQ18G5uzPD58WhuzEj10Nf4hLs2fOLSbmyA6VbN8OjQg1W0Mfn8HU8C81zl/B58LwJVme72GdAEou7IhqS13k6Ka+uLLG6xXl8Vq67EaNyOaV9rN2l09NJudWpsrp8VAaFY9EMRMJVMJfH+9/p8PUuCHH9aLd4HcWhpqmIS7BUlQ5JFKfBIe5LdviGo1g3yJ+hXA7HWK1Wk3KtxiPs3XzzUdKORyS8dBEjz4XiGtQb2M/q6jL5O99fFuexD+lCGpDoghlihhyocLfBIjEvVpfnWZ0Fwg5wFfQXr6IoiqL0Ed14FUVRFKWPbP5Ucwnl35YIYl0jQaftbJnVFfJ4WrNTxUDqC3MXWLu9E/T0Ix+WaaHMkSfJCHxxks9No6yRFaeOfSLJLpLIWLH4LIMca4vliWQivQUiVEzawbq0S5Izi4gyq8sogXSaIqEBGaNlk88KRaKFLpWoucRhieg2CsChO+5Iyg6cZHUZF08Ct1b5/Uh7OK89kgTedkWQ+AhPazbnufkgk8VkF2seSlerDS7/nZtFee1d73krHweRkH2SyMH3RaStHMpk3ZDLdWMlPA5aMJZZXTpbxRd5lIaXqiI5xypK7DLv9+5DO7C8D9cKGUGoMoDPaOyJE8/FUVA4Jlmf0mm+Vg0P4/U7d56fYqdJ7dMZXDNNsUCkyI30Pb6eeiQpg+OiKa0yUGHt2sTkt7jMn6Gz59G0MDqK9/f0KR6d8MYbb0vKk5N7WJ1hZEjdLlY3SK7B6dNoovm7r3+ZtZuZxv1GRt4aHcbna/cONJPs2MUTmbxyHL0Sml6D1e2d4olHrob+4lUURVGUPqIbr6IoiqL0Ed14FUVRFKWPbNrGS5MkuyI6kmOTTBgOd0HIkuPkqZDapLhtcrFJMhwBt2lSVyDq7pB2ebs60e6dNHe1KJJIJoaPdrJaQ2REoZGlimVWRSOZSFtqNo12iHQK7SaNNX6sPSTuRJaI6+IRu0xEy8JlyCRpSmyb38Iw4PZ3BWB+Hq9focztNnHuSFKui2hPjcto09kzgfPp1v3cvuOk0EXp8iJ35wqIy0+G2IJHCtytad8UuuuNiPMJ9gDOJyuL9lNf/L+50cX+W16V1Q11zyTlXOMSq0unsZ+2h3bcV0/y/o387Ul56sduZ3UW0OcL3Y6aq9z1igwRnPwOVufbauOV2Cba7dMZPi/2XXcoKY8Ocnt5i5wfaRPXyssz/N7vnMR7sLC4wuoKJLLeAIlcmCtwd8+FJTwzkMkId0ayVp2/gJ99eXqWNVskn/0X/99fsrp6Hc8r7Nt/gNXd9653J+Vdu/cm5aDL18wB4kY4OcZd/iZG8NqVC+QaiwiKmQKeediVuY7VjY7y63819BevoiiKovQR3XgVRVEUpY9sWmpeWUEpQCZkHhvBqD5VodwWiATrkAg5aw1+7LxFIzwZXCbokgTKc8s4joEclzUcIl/X1qqszi6hTOCyhAkiuLWLfbpp3r9FZOiMiOpDpedWo07KXGr2SOL60OcXKyKhYpjULAKb00QLJogkCSke5UoBcMroquCO3cHqmlWUk62YzwWfROvxiAtXU0RuK2Xw/pSHuQvOchPvR+ij3NVucpeeMkkEkjvP66xFlKsHDqPE1RjikXWiDk7CwQEuqVO3lJfmn2V1p19FGXqti3Nr1Xwnaze+4x1JuQr8s9tVdBtxF3Ec3Tp3mwpJsvsYeFKKoCEi4CuwQhIGWG1+fc5dxGtezHIZuuPjuhASt8uBMo86RbcA0+BriUPWxoEKmgGKZe5OdPAQqStyGTpNou6dOPFqUt6zi7sMVSoY8WpqB0/isbCICW/OXzzF6v78iw8n5bvecFdS7vgiGUqAz+hanbvadUhyGptEP0zl+feskcQ+kTCHXppehGtBf/EqiqIoSh/RjVdRFEVR+ohuvIqiKIrSRzZt46VavSlCKQ4PoT4frYpwXIOokwd1zGhSXeVh90Li4uNHPBQedfGJibZ+YWaaNSuQhOR+k9vhjAhtG3aMfQQhH2/GRdutIdx96OlyV/yXxSDZlNvEZkDtBwAAQRdtXnHM7QQ001AY9rZ3uSTMWyT6MNTGu45UCu2K2Ry/p2EdQ9elMzwr0NhhfDxWSCjI6Vn+2BTGcDIUstzW06nhnF+cxfu7c4K7zrhr2P/AGreL0lCWcQXnuF3idj2PuNOtrvLsQQsLmE2l4fFr8PzL+D63iLbbyRtECM323+M4Um9idXWS2anWJLbb6BbWrljA7xl0uGsLWNx9QwGIMoeTciAS4Lx4GtfJgSK/p65N1gVSNTbGbf97dmMIxptu5vOJZhraex2eLZB2XBq2MS0yqQUBzq3/9V3/a1L2ff5lZmfQvei221/H6mZmLyflF156htU9+SSeV1iYx5DEYPHzOYs1HMf8Kn9GHeKSmUnj2hpH3Bbc9HDPiiJ+DinjihiqV0F/8SqKoihKH9GNV1EURVH6yKalZpf8lJbRkrIkWslQxOWiQhozYyyvEFcCkQQ7IJJsW2T+yZRQrr7rrjcm5elpLjWfOYORh1aXFlhdo4XRhoo5dPmITS4R5Cz8v4htcDkkINlquFAOYJFr0ibZm1r1KmvXJRllHJHiJSBSc0AiUFmmiE5FI1c5/FqZqtatYySNkZTSjZdY3cUZnCeWvcrqxgfRjccaQvl0epb/f/XVSyi9jY9wF5nOEmZDungJpavdQzxqU4dEbmutcBe0Dklx1ZlB14qaCBL08jI+Dxcu8vn/ygmU65aq3IzR6mD/g7vxuwwI1yjDINGQ6mdYnVfFLE9eaiIpOwM38XYuPudujt8LO5JPlZIp4TxJC9fHHTtwXdwxxiOhxT5e54hk1nr///7TrN3OKYziZIh11yERCqnb5fIyj3BlkYh+GeGCSd1QZ+dw7g4McLcmm6yFns/Nc/sPXJ+UR8e5iebHXo8mj2wGr0En4D6vF2bRRc8QJg261obkbRbwdsUcVsYGv1ZGcG2ucPqLV1EURVH6iG68iqIoitJHNi01x0SGkJGUUkSGjkLepU229k4TpbyRMpdNOi2UcRdrPKLTkd0Y5WRiAmWsIXKa+nt1KHe9/PKLrO7UGYx4Mr+IklmhzANmGzFKBmGHn1zzSaIII+CniaksE0Z4rVodEbknRDnNECHAqAwdheSzHH5N6fU3RRQxy9T/S0nSKTR3FPL8pKLr4gV00lxaPX8R75VlowTrpGRyCzwNWlvikl/awPcduhnltRbw05+vkvnkpXlUtLCN0lv9wvmkPH3xFdbupSrKaXVhJllYwXl49jJ/9to1rIsuouxWOXKQtbMiPA3aWn2B1RkkUlJl7OaknM9xD4WQyIjdzj5WF3S5hKkAhD7O18Dgz3bg4VoVi1PCd7/hWFKeHMN1cjCfZe2WF4ipRawzeZIUoNXBNXlhkZ8KztJEIGNcau50SOKOFs6z667jUaHo/tLu8PWfjqMyyE05XZJAJ0We8ztex6O/nTx9/opjAgBYWsHvQ09hUwkdACBkUrww8dniyPlV0FVaURRFUfqIbryKoiiK0kd041UURVGUPrJpGy9FRnuKiT0ya3L7VJYkoB8ZRK2+3eKuAz7R1seneHaKvfvRFtQlieRlBK3xcbTxVirchjBJEj6/8MJzSXm1xm1+XgtfO2nu7sNcqoQ9JAzw+wQkClcsslh0SV0kju/zaCj43cKI90Ht5rawQxjqT7SOeg2va22VX8vFRXQzGz3I7a52hHPZctDFZ89kmbWbuYhRopaXuEtSx0Wb1HgZ+/O7fG49uozva45yW3MmR8Zh4/1duDjH2r34Is7BmohoNjSC8+TGA3zOHD+FfV44cy4p77hwmrXLFIlr4DT/bGcAx5+10I7rALcHGjFeb9/g44it72s5+pHGJe6NIMyIZ0+j+9jCDE8s/8D99yXlwweOJuVz57gb2BpZ76ZFH+022lqLBTy7EEby7AuuaakUt/FS18piAc87/MMj/8DbEbsrPccDAFBfIxHUxKGWDjmH43dxrmVc/iy/4yd+IinbNu/j1ZOYNenRxzESVqvL9yjTwfcZBp+rflfdiRRFURTlNYtuvIqiKIrSRzafJIEE3/dDLjW0Azwm3l7hgc9t4mawYwJlt+On+HFvO1dOyjfdfBurKxZR5vA8lCQC4dITEsk7JRLVHz58I46DyM5PPcOTgq+uoPRiiT6ojGLaXNKlyRCaTZRGaDQqAJ5cPQy51GwTDdki0VWktBOEqDnJ/uPo2o61bwdOvzCTlCcnx1nd2ChGwpk+e5bVTeybTMr5iVuT8kqLJw8YLGACglqD39NLM+giUxzdn5RzxRxrd/ks6WP1PKtziEkllUPXpdMXuPvN8dkqthNmjJSPMnHlOu5Sct0ulABjwPlfPfn3rF36ALoX5dPcrSNFIhZZBkrvRsRlvTgkgfhDj9XZIJKjKAAWrruxwdecVI7cR4s/901yaU0b1+BihUd+CoipqtLhfdAIVYtLaGqprlVZu66PkqzjcIm3WkXTQpu4/vg+v9dOCsc4WLnM6qjnjuPyNdklknJE5los5l0mjXM8neV97NhFkoQ8j5HmQlOa8eiQ+L2wrWv7Dau/eBVFURSlj+jGqyiKoih9RDdeRVEURekjm7bxUtukdCfqkpB28wvcxtsNy0n5uuvRLcg/y9uVh3AouTy3f3XJsW5q15VZkmjYMRmO0Sd2iFIZx7Rr1y7WbnX5+aQs3X06JCybG/JQkAEJDRl2SVg8cSSdhiQzLZENxCXfmww/CrntJSLfjX4vAIBY2IMVgDSxi7YzR1idS7LlGI0ZVtfxqkl50EAbVxzysJCLbWLXsnkC+sEiuuTkiB20vsTPJyyTbFpRjmdnSQdokzp+mowxxe/1+E4c1+pZboe+lYRdve2uO1ndC7PEBSqLNq6ZWX4Oo7OGhsOR8QOsLjOEczdOoVuHFfHnBAy8Vg2TP+dp4N9bATBTGGZUugo61LUm5OvAxWmcTzaZntQlBgDAIS6S2Tx3Y4uJUdMlYUxtYWdtE5cex+Z1+TyeBVgkrnaRcAuyScjdKObrHXWZdFP8fAI9e5QhWfJoCF8AAAjxu8TAzxbEZLH1fHShSgl7tUdco0Lge2Amx8d1NfQXr6IoiqL0Ed14FUVRFKWPbFpqdkgi5G6L/8xuksxCNRHAgybnWfVRhihPXc/alT10YzCFTEwjVNEyjSQlodI4AJceaPSfbFZkEycRf3xPHHnPoBRjiKhZJpErUrRORJ2i7j6RCEVDZWKqLofCZSgknxVxtXrd5ykAhTyJaFO4yOqWaxjhzG/yTFUlwPnarKJpZKg0wtq108T9LddgdddNYv+LyxgVauYin1sXL+DrpQJ/iG4+gC4g43nsLzfAJbNKFu998xCXcW/YPZWUL118ldU1iNKcy+PcGp/k0maamIA6YuUwLJQ60wY+J16Xy8e2eSEpj9hcDje6KjVLTItImMKdiGYpE9Y/OHsBo1qt1fEG+wHP/BPHuLbIwGGOi+tYOkNckiIh92bxw22LS7yNBt7TDHlbJs37oK6gkXRBoxnj2tyFruNh224Ty3Jd73o4jkZzjdXVG3hN8g5e42aLP8sxWa89j1/HIORtr4b+4lUURVGUPqIbr6IoiqL0Ed14FUVRFKWPbNrGe+AAug9Is+JXLmKIr3Pz3J1izEa70NmFalLevWs3a7ePZGTxw97HyaldQ4aMtIntltoM5OtMBo+Jj4zwEGovPI/uRPUq1+13jmLWDFMcqTfJuHJpvKyuI92asCzts9T1yDJp+DPekIbsbAs7dBiqO5GkVkd7T9Eos7p8kbgqhPxxGCnj+8anaGYtPi9KDtqNR/JV/tkXsG1rmbgt1PhnDVdwTrpZPv8XajgvUi7adY0l7u6Qq5DxTvJ59/SZE0nZDgZZXTaL9rYU+c6Bw23IVgHnvFPmGWTadXTZ8gLyPaHM2kUBmcs+t+k6BndfUgAi4t5iC1cdk7rdmHy9O/7yy0n59z+D19U0+Nyia4nMsENDQXpdbNfpcBexDlmDwkD2ceX+bZGZip7diYUbp+eRjHSG3H2QNjlrZFrcHh6QsMa+WE9zWXweHINmoJPjwP4dkf0oFueSrob+4lUURVGUPqIbr6IoiqL0kU1LzbkcSsYyAf0Nh9E16OmXXmJ1JsnwM7+CR8H375lk7QpFzB7R7oisJSRCFZeag021k69p5p/hIZ5lZWwMXUqen32R1VE3J0P8nyUiUV5yWZQhUi6XPNoeDUnFpQwDqFxk0QoBfpduwKVmGSlLAWi0iFSb5VM+5eD9TqVOsbqR4vmknAtRgjp3mctkc6tPJuXxCp+TrSpxw0vtTcpWkd+nVIwRriaP3MTqAhuflXQL3XHWlnn0tzop5yPuamdH+HnNuVVW103jHPJDlJ2HdnOXD9vB+ZkW0mZgo5TXNTDaUi4jIvqQ6dqIuVzn2FwCVwAccsGMSKx3pBya3MRUraK8/Df//YWkHMfcTOKHKJ92u8K9kUi+VP2NYuEiyV7xxYqa+JibqMj8Q11DLSET0y4z2RKrymXRBBTbONc84VUZGcS9TkS1agT4eZ0A957Y5C5JaWKSMcT442v8Dau/eBVFURSlj+jGqyiKoih95PtKkiBPnV1/EE88v+HOO1jd2ctzSXmshD/dh0s8so5HJFIpE1O5giY/kJK3fE3hsgmW02kudx0+fDgpv/DcC6yuVseIJ/mCiK5FTgvSADO2KWUT/GzL2ugkHNFKxPWOYpIkIeR1azUuIyoAg4M41/Lxk6yuWCTJP6w8q2vW8To/+2w1KS+0uQRFE5J3ClxaLQxi/4aHp/9zWS4NLizgPFld4fd0536S4GNoPClbBS7NdpvzSbna4WMcLuPnlU5xE8rpmdmkbA79RFL2nL2snWGgqajV5CaOlIFRqKwUeUYjvsS4OYwiljKrfPzVWVA4YUwi+oUiUp+Dr9NZvvYVHZzLDol2Zho8EYJPQl5JLwtqyqNrZldEBWx1afQrvt5liKkxJB8QiO+Sz+G4MlkR1Sqm7cqsLp3F7+mm8Tn3fT7vGk28PpFIYu+RqIkXLhxPypbYTywiL8skPDKxw9XQX7yKoiiK0kd041UURVGUPqIbr6IoiqL0kc1nJyJHsDsdbt+hNtl3/MRPsLpOB+1TLsn8YAtbgO+jPUHq5+y8+gZmUWl7ptAj6hvZgo8ePZqUv/2d77C62RnM+DHk86P9Y0NoR9m1E11UFqo8E8YieW3ZfByG0WNcprAfkHbyUtXb15YlYztQyuO9OnFCREsyn0jKExXuIjAwgHPXHECbqdnh976cQZcMw+SZi85dxj5aDXT/KQ3wswWV696CfeTfwuqs4OmkHFtojxoe5POiZZPoUcKrLLDQDjc2McDqsjbWVTNYtxTfyNrF/neTct7grkxh6lBSXvXQNmyKZ9Im5zWcJrfpeqvnQelNSpxHCYl91hMumDccuSEp33zw7qS8tMyz+1CvG5mNp+vhvGiRqFCLK6IPYt8s5LkNmUa/ajWxj4HyMGsXEEOujFxokYxHjsPPLljEhmw7aBtea/LoWtU6jqMb8P7bHVyT6XQ1RJSsMKIPFV8DvC7/vKuhv3gVRVEUpY/oxqsoiqIofWTTUjN1u5HHrGlSeEdEBaEB/kOSpD0W8U5CkvBARqSSR9STPoSMtVGgbRZBhbSTrkv5PMp1d9/9Zlb3x3/yp0l5bo5LbSb5PqVCMSmvi3BFv5u4jhERfgyzd5Qs+soQ2ruxLoWF0g5x7kbOAVZXKpHEGiaPXDVDYvY3iUwWxtwVzgcS1S3irhYjFRJNrYJRdyyryNpFBZRnu7kpVrc8+xiWibyYSS2wdjmbyHV1PmfWLHT3GR7gwfbjOewz38Z5vdo6y9pBBuU0W7jCrXZQorYDdBlyomd4HyFe1MXLZ1iVY/MocgqATeaJZYkkCcR8FvvCtkA0ZK+L7dwUd0GzUsRFxuZmsbU1lJ6jFt5v1xVJBoi8nErxMdIkLtkcrrUl4XbndVEqb7R4knkaJUpG1zJCHFdATHBhwOcn3VOabSELx1jHomaJCF1ZEpHQ98U6awhXr6ugv3gVRVEUpY/oxqsoiqIofUQ3XkVRFEXpI5u28bbbqLtLGyzNLCFtpjTUJLX/+iLsGE12TLMMAXDdndpu17kdETbKTkQ/S7ajNoqxsXFWlyV27vkF7grR6aI9ZGUFw2Q26lXWjphu1yW4D8l3s6jLkPzvEelDXoKNrsl2Za2JtsORIp+7+3finIxFOL0zF3COplwScjEv8rGEJNyp8OOpVnGuucTtaHiA27EyziNJeanNz0nMLqJ9dox4YYQhv9eLq/jdTBFKtJ1GN4x2SdiXS2h3tQwMOTogQjq2AO1ygZiUFrHd+rWlpNwI+Pd0MmjnNtLcXanWEDZlBWIg7jJ2bxtvq7PM6qpVvI+t7ihpx+2WDllMZpeqrK5GbLyZDJ59GRots3Z0vaZnZAAA6nV0f4vIOZuSmINtD9386k3+DHU7ZC5b3JYaxfistBv4rLVa3OU1ZKEx+d4D8nXyd362yAD8LFu6goLaeBVFURTlNYtuvIqiKIrSRzYtNV+8eDEpSzmTSs1ShmZZLUgGIipBAHB3H3kkPUuyVVBZQyZM3ig61UZSeS/mF7i7hmniZ9tC8vDJcXifyCa+OOZPg7KYpnT9wcqYZCCKI5HVmbly8O+5QfCubUtlALP2rM3NsboLNItLls/rgWEi/UdYV73I3S5MF92JBneIjEGk/+m5HdhHyKMQjaUx8tnK2susLk5NJmUjj1HRrE6VtfPaJ7Hc4dGFcmQcUWWU1bn7cd6tNVDWjn1+PQbLaHpxghlWB8ZLSbGRwWcj9Pn1aAd47TpChjZsLlMqfL1otrl8CiaNVsXXAZ8s7V0iV4fAZVW/g/c4nRXzIo0mmkwGTRUNsXbT6FS1Gr+nfkDWfyJzhz5v1w3xuwUBN7UEETEHCfmXvqaR/1IOb7fcxf7DkK/JUUjMnNSEItbSOvlursvHCMamt1IA0F+8iqIoitJXdONVFEVRlD6y6d/Hi4sYjUaeOqanlamcDMAl3tVVPGkn+6Dyr4x+RaNm0bqNTvBKOZmOi/YhPyuVRllmrcYlRdvC/6cMFSusLkWSfxey2MdZIQ8FQY8TdADgSPniH4mEfmyQ09Dr8yro/6Ukw6MoYdYvcjPGzBzej1xWnPhcxmvpx1gOhOJXTJME3wGXkHNpjJIzNrErKTcjfqrzqacxOf3kBL/fQ5M7k3K7gxJaFmqsXSaFp1BrXT4/Df9yUo7E+7oOnjSe83DOj8RPs3ZFe39SXunwIPfVCOXlOEMie3ncXJPtYFIKN8tPka919oHCMYlZSSZbD32cr5l0mdUFJr6+OIPzwhLrg2WR5B82n7tdHyf6ShX76Ha4TEwtZqk0X9ddkrig2cJ51475+uykcf6kUnwcfh3btsX+4hCLn2ng9Wg0uRzu+ygny6iJBvkCAbmmrvSuMbEuEpI9RNdm49NVWlEURVH6iG68iqIoitJHdONVFEVRlD7yfUWukvbZVqvVs66Xm5CMGEWjSUlXIFpHbbe0b/m+TkdGLsG2xSLa13I5nmlmaBCP0Psi2X2+UE7KDeB2juEK2hHjAK+HKVye7BSxhQm7AIvy5fa2ZVObr22K/k2NXCVxQnTvSmf53KrXsa5Y4HZXk7gqOC5JwG3weVEpot3JX+VuNqvLOC/cEfxss83buV20hWZTO1ld3MC2YRejQlWBE1iY/Dw/xW1QZhftuOdnL7C6iTLadYcn8bm0LZ4Y/dwMZi6yKtw+61hoU/aIC1Hb5dmg/A66Qw3Ak6yuWLy2ZOLbgYisEaZwWUk7dL7y535lDdcnk0a8isTaStZJw+J1Nsl2FVEXnJh/Fo2yF5v8nEqHrGlehONPO733ieoanwetDg33x8foELdOy8G5a8gxsnWY7z0mGb9H1nxL7I5pGz+r4/E1wA/FwY+roL94FUVRFKWP6MarKIqiKH1k01Iz/am+UYIDGU2Kyr/UdUdGp6IuQ81mk9VR2Zj2Lz+r13gBuLRtEUllbU0mf66S8fLoVEUS2HtugQclz5HA9ikiZUh3pesPHkrKWSFzV1fxsxdIEgbP4zKGSaTnWCRrBuh9TbYrrVl0LQhaXGYqlHDexSKJvZUjLm7E3QFa/JrX11CGGx3h83oYlVVoxCgZZww+jpyN86Q6z+tWjfNJ2bTws53CFGuXGb0eP7fE56dZQ5nYBh6hqEVkP89HCdnp8rm75mE7t/NNVlcq7E3K2WgiKVsieHw9i25ItRZPkpCJj4MiIFJqLGTWkERTEzH7IUuSGuSL5aS8tsJNZC5JnhHLqFZdXIcjknRDGrNisp4ur3I3HjDx2Uil0LXIF2Y208K5Fgby9yAx0dh8TtLIWD6Rqw2LuyQB4B7V7fDvGRDTYMqlEQP5GKMuSVwT8XltW/yZvRr6i1dRFEVR+ohuvIqiKIrSR3TjVRRFUZQ+smkbb7VaTcoyLCS1Y1LXIgBur6UuSeVymbXbs2dPUpbhHqlNmdbJdtSuK22r1MbbJmEcpVsTDWuZFzbY0RF0mThz9jSrW17FbDClNLXLsGYwOYl2uV27d7G6iIQr+85j30rKJ0+9ytq55LuJ4UMAm8u8tJ2gNv2pErfNzLdxvhoWt91W19Be66/go5Iyuc3dJ+4IrZDPu26Ez4qbL2O5yF2G7EnMoJR2+D3srKEL0dAg2m7zFT5edwBtvP7aAKtLEbNWXFhldUvBzUnZIC4ftneGtQsCtAdaHe5qFAE+D4FFkp8bPLSkm8M+/OJtrK7R2gGKgLquibUkJtZW6WpUJ+dF4gDnYCgy/9g2zqEY+Lru+3iPbXJWZ935GRLKMpsWZ3yICw61E9MyAECXhNK1HfF7kHQZxPzZi8n39qmrqcjoZpJ10TZ4HV2jLXJ+xjL4d3GJq5Qp3Da74bWtu/qLV1EURVH6iG68iqIoitJHjDjW1OmKoiiK0i/0F6+iKIqi9BHdeBVFURSlj+jGqyiKoih9RDdeRVEURekjuvEqiqIoSh/RjVdRFEVR+ohuvIqiKIrSR3TjVRRFUZQ+ohuvoiiKovSR/x/SLYITErg/zwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "plt.figure()\n",
    "# 展示3×3的图片\n",
    "def display():\n",
    "    nrow, ncol = 3, 3\n",
    "    for i in range(nrow*ncol):\n",
    "        plt.subplot(nrow, ncol, i+1)\n",
    "        image, label = next(test_dataset.create_tuple_iterator())\n",
    "        image = np.transpose(image[0],(1,2,0))\n",
    "        mean = np.array([0.4914, 0.4822, 0.4465])\n",
    "        std = np.array([0.2023, 0.1994, 0.2010])\n",
    "        image = std * image + mean \n",
    "        image = np.clip(image, 0, 1)\n",
    "        plt.title(label[0])\n",
    "        plt.imshow(image)\n",
    "        plt.axis('off')\n",
    "    plt.show()\n",
    "display()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "326242acc73a88c8",
   "metadata": {},
   "source": [
    "# 构建网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "16cc365d410709f",
   "metadata": {},
   "outputs": [],
   "source": [
    "import mindspore.nn as nn\n",
    "from typing import Optional\n",
    "from mindspore.common.initializer import Normal\n",
    "\n",
    "weight_init = Normal(mean=0,sigma=0.2)\n",
    "gamma_init = Normal(mean=1, sigma=0.02)\n",
    "\n",
    "# 最后一个卷积核的数量和第一个卷积核数量相等\n",
    "class ResidualBlockBase(nn.Cell):\n",
    "    expansion = 1\n",
    "\n",
    "    def __init__(self, in_channel: int, out_channel: int,\n",
    "                stride: int = 1, norm: Optional[nn.Cell] = None,\n",
    "                down_sample: Optional[nn.Cell] = None):\n",
    "        super().__init__()\n",
    "        if not norm:\n",
    "            self.norm = nn.BatchNorm2d(out_channel)\n",
    "        else:\n",
    "            self.norm = norm\n",
    "        self.conv1 = nn.Conv2d(in_channel, out_channel,\n",
    "                               kernel_size=3,stride=stride,\n",
    "                               weight_init=weight_init)\n",
    "        self.conv2 = nn.Conv2d(in_channel, out_channel * self.expansion,\n",
    "                               kernel_size=3,stride=stride,\n",
    "                               weight_init=weight_init)\n",
    "        self.relu = nn.ReLU()\n",
    "        self.down_sample = down_sample\n",
    "    def construct(self, x):\n",
    "        identity = x\n",
    "        x = self.conv1(x)\n",
    "        x = self.norm(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.conv2(x)\n",
    "        x = self.norm(x)\n",
    "\n",
    "        if self.down_sample is not None:\n",
    "            identity = self.down_sample(identity)\n",
    "        return self.relu(identity + x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b6ae6150",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 最后一个卷积核的数量是一个卷积核数量的4倍\n",
    "class ResidualBlock(nn.Cell):\n",
    "    expansion = 4\n",
    "    def __init__(self, in_channel: int, out_channel: int,\n",
    "                stride: int = 1, down_sample: Optional[nn.Cell] = None):\n",
    "        super().__init__()\n",
    "\n",
    "        self.conv1 = nn.Conv2d(in_channel,out_channel,\n",
    "                    kernel_size=1,weight_init=weight_init)\n",
    "        self.norm1 = nn.BatchNorm2d(out_channel)\n",
    "\n",
    "        self.conv2 = nn.Conv2d(out_channel,out_channel,\n",
    "                    kernel_size=3,stride=stride,\n",
    "                    weight_init=weight_init)\n",
    "        self.norm2 = nn.BatchNorm2d(out_channel)\n",
    "\n",
    "        self.conv3 = nn.Conv2d(out_channel,out_channel*self.expansion,\n",
    "                    kernel_size=1,weight_init=weight_init)\n",
    "        self.norm3 = nn.BatchNorm2d(out_channel*self.expansion)\n",
    "\n",
    "        self.relu = nn.ReLU()\n",
    "        self.down_sample = down_sample\n",
    "        self.sequential = nn.SequentialCell([\n",
    "            self.conv1, self.norm1, self.relu,\n",
    "            self.conv2, self.norm2, self.relu,\n",
    "            self.conv3, self.norm3, self.relu\n",
    "        ])\n",
    "    def construct(self, x):\n",
    "        identity = x\n",
    "        x = self.sequential(x)\n",
    "        if self.down_sample is not None:\n",
    "            identity = self.down_sample(identity)\n",
    "        return self.relu(x + identity)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d547796e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from typing import Type, Union, List\n",
    "def make_layer(last_out_channel,\n",
    "               block:Type[Union[ResidualBlockBase,ResidualBlock]],\n",
    "               channel: int, block_nums: int, stride: int = 1):\n",
    "    '''\n",
    "    last_out_channel: 上一个输出的通道数\n",
    "    block: 残差网络类别\n",
    "    channel: 残差网络输入的通道数\n",
    "    block_nums: 残差网络块堆叠的个数\n",
    "    stride: 卷积移动的步幅\n",
    "    '''\n",
    "    \n",
    "    down_sample = None # shortcuts 分支\n",
    "    if stride != 1 or last_out_channel != channel * block.expansion:\n",
    "        down_sample = nn.SequentialCell([\n",
    "            nn.Conv2d(last_out_channel, channel * block.expansion,\n",
    "                    kernel_size=1, stride=stride,weight_init=weight_init),\n",
    "            nn.BatchNorm2d(channel * block.expansion, gamma_init=gamma_init)\n",
    "        ])\n",
    "    layers = []\n",
    "    layers.append(block(last_out_channel,channel,stride=stride,down_sample=down_sample))\n",
    "\n",
    "    in_channel = channel * block.expansion\n",
    "    # 堆叠残差网络\n",
    "    for i in range(1, block_nums):\n",
    "        layers.append(block(in_channel, channel))\n",
    "    \n",
    "    return nn.SequentialCell(layers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6f0fff3e",
   "metadata": {},
   "outputs": [],
   "source": [
    "class ResNet(nn.Cell):\n",
    "    def __init__(self, block: Type[Union[ResidualBlockBase, ResidualBlock]],\n",
    "                layer_nums: List[int], num_classes: int, input_channel: int)->None:\n",
    "        super().__init__()\n",
    "\n",
    "        self.relu = nn.ReLU()\n",
    "        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, weight_init=weight_init)\n",
    "        self.norm = nn.BatchNorm2d(64)\n",
    "        self.max_pool = nn.MaxPool2d(kernel_size=3, stride=2, pad_mode='same')\n",
    "\n",
    "        self.layer1 = make_layer(64, block, 64, layer_nums[0])\n",
    "        self.layer2 = make_layer(64 * block.expansion, block, 128, layer_nums[1], stride=2)\n",
    "        self.layer3 = make_layer(128 * block.expansion, block, 256, layer_nums[2], stride=2)\n",
    "        self.layer4 = make_layer(256 * block.expansion, block, 512, layer_nums[3], stride=2)\n",
    "\n",
    "        self.avg_pool = nn.AvgPool2d()\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.fc = nn.Dense(in_channels=input_channel, out_channels=num_classes)\n",
    "    \n",
    "    def construct(self, x):\n",
    "        x = self.conv1(x)\n",
    "        x = self.norm(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool(x)\n",
    "\n",
    "        x = self.layer1(x)\n",
    "        x = self.layer2(x)\n",
    "        x = self.layer3(x)\n",
    "        x = self.layer4(x)\n",
    "\n",
    "        x = self.avg_pool(x)\n",
    "        x = self.flatten(x)\n",
    "        x = self.fc(x)\n",
    "\n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "77ce0604",
   "metadata": {},
   "outputs": [],
   "source": [
    "from mindspore import load_checkpoint,load_param_into_net\n",
    "def _resnet(model_url: str, block: Type[Union[ResidualBlockBase, ResidualBlock]],\n",
    "            layers: List[int], num_classes: int, pretrained: bool, pretrained_ckpt: str,\n",
    "            input_channel: int):\n",
    "    model = ResNet(block, layers, num_classes, input_channel)\n",
    "    if pretrained:\n",
    "        # 加载预训练模型\n",
    "        download(url=model_url, path=pretrained_ckpt, replace=True)\n",
    "        param_dict = load_checkpoint(pretrained_ckpt)\n",
    "        # print('-'*25)\n",
    "        # print(param_dict)\n",
    "        load_param_into_net(model, param_dict)\n",
    "\n",
    "    return model\n",
    "\n",
    "\n",
    "def resnet50(num_classes: int = 1000, pretrained: bool = False):\n",
    "    \"\"\"ResNet50模型\"\"\"\n",
    "    resnet50_url = \"https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/models/application/resnet50_224_new.ckpt\"\n",
    "    resnet50_ckpt = \"./LoadPretrainedModel/resnet50_224_new.ckpt\"\n",
    "    return _resnet(resnet50_url, ResidualBlock, [3, 4, 6, 3], num_classes,\n",
    "                   pretrained, resnet50_ckpt, 2048)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "24723465",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/models/application/resnet50_224_new.ckpt (97.7 MB)\n",
      "\n",
      "file_sizes: 100%|█████████████████████████████| 102M/102M [00:00<00:00, 171MB/s]\n",
      "Successfully downloaded file to ./LoadPretrainedModel/resnet50_224_new.ckpt\n"
     ]
    }
   ],
   "source": [
    "# 定义ResNet50网络\n",
    "network = resnet50(pretrained=True)\n",
    "\n",
    "# 全连接层输入层的大小\n",
    "in_channel = network.fc.in_channels\n",
    "fc = nn.Dense(in_channels=in_channel, out_channels=10)\n",
    "# 重置全连接层\n",
    "network.fc = fc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "99855880",
   "metadata": {},
   "outputs": [],
   "source": [
    "num_epochs = 5\n",
    "lr = nn.cosine_decay_lr(min_lr=1e-4,\n",
    "                        max_lr=1e-2,\n",
    "                        total_step=num_epochs*train_dataset.get_dataset_size(),\n",
    "                        step_per_epoch=train_dataset.get_dataset_size(),\n",
    "                        decay_epoch=num_epochs)\n",
    "opt = nn.Momentum(params=network.trainable_params(),learning_rate=lr,momentum=0.9)\n",
    "loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')\n",
    "\n",
    "def forward_fn(inputs, targets):\n",
    "    logits = network(inputs)\n",
    "    loss = loss_fn(logits, targets)\n",
    "    return loss\n",
    "\n",
    "grad_fn = ms.value_and_grad(forward_fn, None, opt.parameters)\n",
    "\n",
    "def train_step(inputs, targets):\n",
    "    loss, grad = grad_fn(inputs, targets)\n",
    "    opt(grad)\n",
    "    return loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "b793da56",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "data_loader_train = train_dataset.create_tuple_iterator(num_epochs=num_epochs)\n",
    "data_loader_val   = test_dataset.create_tuple_iterator(num_epochs=num_epochs)\n",
    "\n",
    "best_acc = 0\n",
    "best_ckpt_dir = './BestCheckPoint'\n",
    "best_ckpt_path = './BestCheckPoint/resnet50-best.ckpt'\n",
    "\n",
    "if not os.path.exists(best_ckpt_dir):\n",
    "    os.mkdir(best_ckpt_dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7b27f27b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import mindspore.ops as ops\n",
    "step_size_train = train_dataset.get_dataset_size()\n",
    "def train(data_loader, epoch):\n",
    "    losses = []\n",
    "    network.set_train(True)\n",
    "    for i, (images, labels) in enumerate(data_loader):\n",
    "        loss = train_step(images, labels)\n",
    "        if i % 50 == 0 or i == step_size_train - 1:\n",
    "            print('Epoch: [%3d/%3d], Steps: [%3d/%3d], Train Loss: [%5.3f]' % (epoch + 1, num_epochs, i + 1, step_size_train, loss))\n",
    "            losses.append(loss)\n",
    "    return sum(losses) / len(losses)\n",
    "\n",
    "\n",
    "def evaluate(data_loader):\n",
    "    \"\"\"模型验证\"\"\"\n",
    "    network.set_train(False)\n",
    "\n",
    "    correct_num = 0.0  # 预测正确个数\n",
    "    total_num = 0.0  # 预测总数\n",
    "\n",
    "    for images, labels in data_loader:\n",
    "        logits = network(images)\n",
    "        pred = logits.argmax(axis=1)  # 预测结果\n",
    "        correct = ops.equal(pred, labels).reshape((-1, ))\n",
    "        correct_num += correct.sum().asnumpy()\n",
    "        total_num += correct.shape[0]\n",
    "\n",
    "    acc = correct_num / total_num  # 准确率\n",
    "\n",
    "    return acc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "0efa4224",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Start Training Loop ...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/Ascend/ascend-toolkit/8.0.0/opp/built-in/op_impl/ai_core/tbe/impl/util/util_conv2d_dynamic.py:130: UserWarning: conv2d fmap ori_range changed from [[32, 2147483647], [2048, 2048], [1, 3], [1, 3]] to [[32, 2147483647], [2048, 2048], [1, 3], (1, 3)].\n",
      "  warnings.warn(to_print)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "..Epoch: [  1/  5], Steps: [  1/196], Train Loss: [2.338]\n",
      "Epoch: [  1/  5], Steps: [ 51/196], Train Loss: [0.984]\n",
      "Epoch: [  1/  5], Steps: [101/196], Train Loss: [0.928]\n",
      "Epoch: [  1/  5], Steps: [151/196], Train Loss: [0.650]\n",
      ".Epoch: [  1/  5], Steps: [196/196], Train Loss: [0.577]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/Ascend/ascend-toolkit/8.0.0/opp/built-in/op_impl/ai_core/tbe/impl/util/util_conv2d_dynamic.py:130: UserWarning: conv2d fmap ori_range changed from [[16, 31], [2048, 2048], [1, 3], [1, 3]] to [[16, 31], [2048, 2048], [1, 3], (1, 3)].\n",
      "  warnings.warn(to_print)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------------\n",
      "Epoch: [  1/  5], Average Train Loss: [1.095], Accuracy: [0.751]\n",
      "--------------------------------------------------\n",
      "Epoch: [  2/  5], Steps: [  1/196], Train Loss: [0.704]\n",
      "Epoch: [  2/  5], Steps: [ 51/196], Train Loss: [0.528]\n",
      "Epoch: [  2/  5], Steps: [101/196], Train Loss: [0.678]\n",
      "Epoch: [  2/  5], Steps: [151/196], Train Loss: [0.605]\n",
      "Epoch: [  2/  5], Steps: [196/196], Train Loss: [0.626]\n",
      "--------------------------------------------------\n",
      "Epoch: [  2/  5], Average Train Loss: [0.628], Accuracy: [0.814]\n",
      "--------------------------------------------------\n",
      "Epoch: [  3/  5], Steps: [  1/196], Train Loss: [0.429]\n",
      "Epoch: [  3/  5], Steps: [ 51/196], Train Loss: [0.438]\n",
      "Epoch: [  3/  5], Steps: [101/196], Train Loss: [0.452]\n",
      "Epoch: [  3/  5], Steps: [151/196], Train Loss: [0.594]\n",
      "Epoch: [  3/  5], Steps: [196/196], Train Loss: [0.624]\n",
      "--------------------------------------------------\n",
      "Epoch: [  3/  5], Average Train Loss: [0.507], Accuracy: [0.826]\n",
      "--------------------------------------------------\n",
      "Epoch: [  4/  5], Steps: [  1/196], Train Loss: [0.314]\n",
      "Epoch: [  4/  5], Steps: [ 51/196], Train Loss: [0.414]\n",
      "Epoch: [  4/  5], Steps: [101/196], Train Loss: [0.435]\n",
      "Epoch: [  4/  5], Steps: [151/196], Train Loss: [0.458]\n",
      "Epoch: [  4/  5], Steps: [196/196], Train Loss: [0.372]\n",
      "--------------------------------------------------\n",
      "Epoch: [  4/  5], Average Train Loss: [0.399], Accuracy: [0.844]\n",
      "--------------------------------------------------\n",
      "Epoch: [  5/  5], Steps: [  1/196], Train Loss: [0.434]\n",
      "Epoch: [  5/  5], Steps: [ 51/196], Train Loss: [0.309]\n",
      "Epoch: [  5/  5], Steps: [101/196], Train Loss: [0.327]\n",
      "Epoch: [  5/  5], Steps: [151/196], Train Loss: [0.330]\n",
      "Epoch: [  5/  5], Steps: [196/196], Train Loss: [0.364]\n",
      "--------------------------------------------------\n",
      "Epoch: [  5/  5], Average Train Loss: [0.353], Accuracy: [0.849]\n",
      "--------------------------------------------------\n",
      "================================================================================\n",
      "End of validation the best Accuracy is:  0.849, save the best ckpt file in ./BestCheckPoint/resnet50-best.ckpt\n",
      "CPU times: user 14min 48s, sys: 34.7 s, total: 15min 23s\n",
      "Wall time: 3min 5s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# 开始循环训练\n",
    "print(\"Start Training Loop ...\")\n",
    "\n",
    "for epoch in range(num_epochs):\n",
    "    curr_loss = train(data_loader_train, epoch)\n",
    "    curr_acc = evaluate(data_loader_val)\n",
    "\n",
    "    print(\"-\" * 50)\n",
    "    print(\"Epoch: [%3d/%3d], Average Train Loss: [%5.3f], Accuracy: [%5.3f]\" % (\n",
    "        epoch+1, num_epochs, curr_loss, curr_acc\n",
    "    ))\n",
    "    print(\"-\" * 50)\n",
    "\n",
    "    # 保存当前预测准确率最高的模型\n",
    "    if curr_acc > best_acc:\n",
    "        best_acc = curr_acc\n",
    "        ms.save_checkpoint(network, best_ckpt_path)\n",
    "\n",
    "print(\"=\" * 80)\n",
    "print(f\"End of validation the best Accuracy is: {best_acc: 5.3f}, \"\n",
    "      f\"save the best ckpt file in {best_ckpt_path}\", flush=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a202187-0789-4ed9-b3fa-db1c04600da4",
   "metadata": {},
   "source": [
    "# 可视化模型预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "16fc8913-7826-4d90-8a34-1f4b6fc318aa",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers). Got range [-1.754760736716321e-08..0.9999999885559081].\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "def visualize_model(best_ckpt_path, dataset):\n",
    "    num_class = 10\n",
    "    net = resnet50(num_class)\n",
    "    param_dict = ms.load_checkpoint(best_ckpt_path)\n",
    "    ms.load_param_into_net(net, param_dict)\n",
    "    data = next(dataset.create_dict_iterator())\n",
    "    images = data['image']\n",
    "    labels = data['label']\n",
    "    output = net(images)\n",
    "    pred   = np.argmax(output.asnumpy(), axis=1)\n",
    "    classes = []\n",
    "    with open(data_dir + '/batches.meta.txt', mode='r') as f:\n",
    "        for line in f:\n",
    "            line = line.rstrip()\n",
    "            if line:\n",
    "                classes.append(line)\n",
    "    plt.figure()\n",
    "    for i in range(6):\n",
    "        plt.subplot(2,3,i+1)\n",
    "        # 正确的是蓝色，否则红色\n",
    "        color = 'blue' if pred[i] == labels.asnumpy()[i] else 'red'\n",
    "        plt.title('predict:{}'.format(classes[pred[i]]),color=color)\n",
    "        picture = np.transpose(images.asnumpy()[i], (1,2,0))\n",
    "        mean = np.array([0.4914, 0.4822, 0.4465])\n",
    "        std = np.array([0.2023, 0.1994, 0.2010])\n",
    "        picture = picture * std + mean\n",
    "        plt.imshow(picture)\n",
    "        plt.axis('off')\n",
    "        \n",
    "    plt.show()\n",
    "    \n",
    "\n",
    "# 使用测试数据集进行验证\n",
    "visualize_model(best_ckpt_path=best_ckpt_path, dataset=test_dataset)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
